1变量
1.1 变量类型
变量存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。
基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。
因此,变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符。
1.2 变量赋值
Python中的变量赋值不需要类型声明。
每个变量在内存中创建,都包括变量的标识,名称和数据这些信息。
每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
等号(=)用来给变量赋值。
等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。例如:
#!/bin/evn python #-*- coding:utf-8 -*- #Author:Anliu name = 'anliu jiang' age = 18 salary = 0.001 print(name,age,salary)
1.3 多个变量赋值
Python允许你同时为多个变量赋值。例如:
#!/bin/evn python #-*- coding:utf-8 -*- #Author:Anliu a = b = c = 1 print(a) print(b) print(c) print(a,b,c)
以上实例,创建一个整型对象,值为1,三个变量被分配到相同的内存空间上。
您也可以为多个对象指定多个变量。例如:
#!/bin/evn python #-*- coding:utf-8 -*- #Author:Anliu a,b,c,= 1,3.1415,"john" print(a,b,c)
以上实例,两个整型对象 1 和 2 分别分配给变量 a 和 b,字符串对象 "john" 分配给变量 c。
1.4 变量的赋值
思考:一下程序输出结果是什么?
#!/bin/evn python #-*- coding:utf-8 -*- #Author:Anliu name1 = "anttech" name2 = name1 print(name1,name2) name2 = "thinking" print(name1,name2)
1.5 定义变量的规则
变量名只能是字母,数字或下划线的组合
变量名的第一个字符不能是数字
关键字不能声明为变量:
#!/bin/evn python #-*- coding:utf-8 -*- #Author:Anliu tingtingceshi = DMDB_OF_dir = cmdb_of_dir= CmdbOfDir =
注意:在python中是没有常量的概念。在C中const定义常量。
在Python中表示常量用大写的变量名表示(只是人为规定)
1.6 字符串操作
#Author:Anliu name = "{name} is a boy, he likes {yunwei}" print(name) print(name.count("l")) #统计字母个数 print(name.capitalize()) #将字符串首字母大写 print(name.center(50,"-")) #将字符串格式化居中输出 print(name.encode(encoding="utf-8")) #将字符串编码 print(name.endswith("x")) #判断字符串结尾字符 print(name.expandtabs(tabsize=10)) #将tab转换为空格 print(name.format(name="anliu",yunwei="linux")) #格式化输出 print(name.find("n")) #获取索引 print(name.format_map({"name":"anliu","yunwei":"linux"})) #字典的方式格式输出 print(name.index("a")) #获取索引 print("123".isdigit()) #判断字符串是否为数字 print("wq123q".isalnum()) #判断字符串是否为数字字母组合 print("wql".isalpha()) #判断字符串是否为字母 print("111".isdecimal()) #判断字符串是否为十进制 print(name.isidentifier()) #判断是否为合法的标识符 print("abc".islower()) #判断是否为小写字母 print("123".isdigit()) #判断是否为数字 print("123".isprintable()) #判断字符串是否可打印,tty File OR driver File print(" ".isspace()) #判断是否为空格 print("15000 International Students Are Living In A Dilemma".istitle()) #是否为标题 print("ABC".isupper()) #是否大写 print("SBA".lower()) #转换为小写 print(" ABC".lstrip()) print("ABC ".rstrip()) print(" ABC ".strip()) print("abc".ljust(10,"+")) print("abc".rjust(10,"+")) p = str.maketrans("anliua","123456") print("anliu".translate(p)) print("anliu".partition("l")) #分割成元组 print("anliu".replace("a","A")) #替代 print("anliu".split("l")) #分割成列表 print("1+1+1+1".split("+")) print("anliu is a boy".splitlines()) #按换行返回列表 print("www.baidu.com".startswith("www")) #判断以某前缀开始 print("This is a web addr:www.baidu.com".startswith("www",19)) print("abc".zfill(50))
2 字符编码
2.1 python程序中的字符编码
python解释器在加载.py文件中的代码时,会对内容进行编码(默认ascill)
在python2以及python3.6下执行一下代码:
[root@bogon test]# cat hw.py #/usr/bin/python2 print ("您好,世界!!!")
[root@bogon test]# python2 hw.py
File "hw.py", line 2 SyntaxError: Non-ASCII character 'xe6' in file hw.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
在python3.6上运行
在python3.7版本下运行改代码:
在pyhon2以及python3.6上再次执行如下代码:
[root@bogon test]# cat hw.py #/usr/bin/python3 #-*-coding:utf-8 -*- print("您好,世界!!!")
Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。
解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*- 或者 #coding=utf-8 就行了
就是说,在python7上Cpython强制使用utf-8编码。
所以如果大家在学习过程中,代码中包含中文,就需要在头部指定编码。
**注意:**Python3.X 源码文件默认使用utf-8编码,所以可以正常解析中文,无需指定 UTF-8 编码。
**注意:**如果你使用编辑器,同时需要设置 py 文件存储的格式为 UTF-8,否则会出现类似以下错误信息:
2.2 字符编码介绍
ASCII,美国标准信息交换代码是基于拉丁字母的一套电脑编码系统,主要用于显示现在英语和其他西欧语言,其最多只能用8位来表示(一个字节),即:2**8=256-1,所以呢,ASCII码最多只能表示255个字符。
有128-255个字符的扩展。
为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体的big5.
7445个汉字扩展存储——JB2312(1980年)
1995年汉字的扩展规模达到21886个符号,分别是汉字区和图形符号区,产生了GBK1.0。
2000年的GB18030取代了GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文,蒙文,维吾尔文等重要的少数民族文字。
从ASCII、GB2312、GBK到GB18030,这些编码是向下兼容的。
显然ASCII码是无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即Unicode。
Unicode(统一码,万国码,单一码)是一种在计算机上使用的字符编码,Unicode是为了解决传统的字符编码方案的局限性而产生的,他为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定所有的字符和符号最少由16位来表示(2个字节)。
UTF-8,是对Unicode编码的压缩和优化,他不在是最少使用2个字节了,而是将所有的字符和符号进行分类:ASCII码中的内容用1个字节保存,欧洲的字符用2个字节保存,东亚的字符用3个字节保存。
故而有了我们上面2.1节描述的问题。
2.3 字符编码与解码
在Python 3里将文本和二进制数据做了更为清晰的区分。文本总是Unicode,有str类型表示,二进制数据则由byte类型表示。Python 3不会以任意隐式的方式混用str和bytes。我们不同拼接字符串与字节包,也无法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然)。
这就也要我们了解如何将字节码转换成字符串,如何将字符串转换为字节码。
#!/usr/bin/env python #-*- coding:utf-8 -*- #AUTHOR: Carve msg = "我们都是好孩子" print(msg) print(msg.encode(encoding="utf-8")) print(msg.encode(encoding="utf-8").decode(encoding="utf-8"))
3 数据类型
3.1 数值型
例如我么要开发一个游戏,我们经常需要使用数字记录游戏中用户的得分、游戏中角色的生命值、伤害值等信息,Python 语言提供了数值类型用于保存这些数值。
Python 中这些数值类型都是不可改变的,如果我们要修改数字类型变量的值,那么其底层实现的过程是,先将新值存放到内存中,然后修改变量让其指向新的内存地址,换句话说,Python 中修改数值类型变量的值,其实只是修改变量名所表示的内存空间。
数值类型只是一个泛泛的统称,Python 中的数值类型主要包括整形、浮点型和复数类型。
3.1.1 整型(int)
在常规语言中:
在32位机器上,整数的位数为32位,取值范围-2**32~2**32-1。
在64位机器上,整数的位数为64位。取值范围-2**64~2**64-1。
整形专门用来表示整数,即没有小数部分的数。在 Python 中,整数包括正整数、0 和负整数。
和其他强类型语言不同,它们会提供多种整形类型,开发者要根据数值的大小,分别用不同的整形类型存储,以 C 语言为例,根据数值的大小,开发者要合理选择 short、int、long 整形类型存储,大大增加了开发难度。
Python 则不同,它的整型支持存储各种整数值,无论多大或者多小,Python 都能轻松处理(当所用数值超过计算机自身的计算功能时,Python 会自动转用高精度计算)。
#!/bin/evn python #Author:Anliu a = 56 print(a) a=999999999999999999999999999999 print(a) print(type(a))
3.1.2 浮点型
浮点型数值用于保存带小数点的数值,Python 的浮点数有两种表示形式:
- 十进制形式:这种形式就是平常简单的浮点数,例如 5.12、512.0、0.512。浮点数必须包含一个小数点,否则会被当成整数类型处理。
- 科学计数形式:例如 5.12e2(即 5.12×10^2)、5.12E2(也是 5.12 ×10^2)。
必须指出的是,只有浮点型数值才可以使用科学计数形式表示。例如 51200 是一个整型值,但 512E2 则是浮点型值。
#!/bin/evn python #Author:Anliu af1 = 3.14159265 print(af1) af2 = 3.14 print(type(af2)) f1 = 5.12e2 print(f1) f2 = 5e3 print(f2) print(type(f2))
3.1.3 复数
复数是由实数部分和虚数部分组成,一般的形式为x+yj,其中的X 是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。
3.2 布尔值
真或者假
1或者0
#/usr/bin/python3 #-*- coding:utf-8 -*- #author: Carve a = 1 if a : print("good") else: print("bad")
3.3字符串
字符串就是一系列数字,在python中,用引号引起来的都是字符串,其中的引号可以是单引号,也可以是双引号
符串或串(String)是由数字、字母、下划线组成的一串字符。
一般记为 : s="a1a2···an"(n>=0)
它是编程语言中表示文本的数据类型。
python的字串列表有2种取值顺序:
从左到右索引默认0开始的,最大范围是字符串长度少1 从右到左索引默认-1开始的,最大范围是字符串开头
如果你要实现从字符串中获取一段子字符串的话,可以使用 [头下标:尾下标] 来截取相应的字符串,其中下标是从 0 开始算起,可以是正数或负数,下标可以为空表示取到头或尾。
[头下标:尾下标] 获取的子字符串包含头下标的字符,但不包含尾下标的字符。
a = "womendoushihaohaizi"
a[:5]
'women'
a[5:]
'doushihaohaizi'
a[5:10]
'doush'
#!/bin/evn python #-*- coding:utf-8 -*- #Author:Anliu str = 'Hello World' print(str) print(str[0]) print(str[2:5]) print(str[2:]) print(str * 2) print(str + "TEST")
加号(+)是字符串连接运算符,星号(*)是重复操作。
Python 列表截取可以接收第三个参数,参数作用是截取的步长,以下实例在索引 1 到索引 4 的位置并设置为步长为 2(间隔一个位置)来截取字符串:
#!/bin/evn python #-*- coding:utf-8 -*- #Author:Anliu str = "abababababa" print(str[2:10:2])
输出结果:aaaa
使用方法修改字符串的大小写
#Author:Anliu name = "wo men ai shangluo" print(name.title())
注:name.title()中,name后面的(.)让Python对变量name执行的方法。
还有类似以下方法:
#Author:Anliu name = "wo men ai shangluo" print(name.title()) print(name.upper()) print(name.lower())
字符串拼接:
#Author:Anliu name = "wo men ai" name1 = "shangluo" ull_name = name +" "+ name1 print(full_name)
使用制表符或者换行符来添加空白:
要在字符串中添加换行符,可使用字符组合 :
#Author:Anliu print("python C")
python
C
还可以在同一个字符串中同时包含制表符和换行符。字符串" "r让python换到下一行,并在下一行开头添加一个制表符。
#Author:Anliu print("python C Java")
输出结果:
python
C
Java
删除空白:
#Author:Anliu name = " python " print(name) print(name.rstrip()) print(name.lstrip()) print(name.strip())
什么意思呢?你猜。。。
输出高亮显示:
1.实现过程
终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关。控制字符颜色的转义序列是以ESC开头,即用 33来完成
2.书写过程
开头部分: 33[显示方式;前景色;背景色m
结尾部分: 33[0m
注意:
开头部分的三个参数:显示方式,前景色,背景色是可选参数,可以只写其中的某一个;另外由于表示三个参数不同含义的数值都是唯一的没有重复的,所以三个参数的书写先后顺序没有固定要求,系统都能识别;但是,建议按照默认的格式规范书写。
结尾部分其实也可以省略,但是为了书写规范,建议 33[***开头, 33[0m结尾。
3.参数
- 显示方式:** 0(默认值)、1(高亮)、22(非粗体)、4(下划线)、24(非下划线)、 5(闪烁)、25(非闪烁)、7(反显)、27(非反显)
- **前景色**: 30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(蓝色)、35(洋 红)、36(青色)、37(白色)
- **背景色**: 40(黑色)、41(红色)、42(绿色)、 43(黄色)、44(蓝色)、45(洋 红)、46(青色)、47(白色)
4.常见开头格式