python语言基础
1、常量和变量
1.1、常量
常量是内存中用于保存固定值的单元,在程序中常量的值不能发生改变;python并没有命名常量,也就是说不能像C语言那样给常量起一个名字。
python常量包括:数字、字符串、布尔值、空值;
1.1.1 数字
python包括:整数、长整数、浮点数、复数,4种类型的数字;
1> 整数:表示不包含小数点的实数,在32位计算机上,标准整数的取值范围为-231~231-1,即-2147483648~2147483647;在64位计算机上,标准整数的取值范围为-263~263-1,即-9223372036854775808~9223372036854775807;
2> 长整数:顾名思义,就是取值范围很大的整数;python的长整数的取值范围仅与计算机支持的虚拟内存大小有关,也就是说,python能表达非常大的整数;
3> 浮点数:包含小数点的浮点型数字;
4> 复数:可以用a+bi表示的数字,a和b是实数,i是虚数单位。虚数单位是二次方程式x2+1=0的一个解。
1.1.2 字符串
字符串是一个由字符组成的序列,字符串常量使用单引号(')或双引号(")括起来。
例如:
1 '我是字符串'
2 "我是字符串"
3 "this is string"
4 'this is string'
1>转义字符:当需要在字符串中使用特殊字符时,python 使用反斜杠(\)作为转义字符。
例如需要在单括号扩起来的字符串中使用单引号('),代码如下:
1 '字符串中使用单引号(\')括起来'
2 "字符串中使用双引号(\")括起来"
python常用的转义符
转义字符 | 具体描述 |
\n | 换行 |
\r | 回车 |
\v | 纵向制表符 |
\t | 横向制表符 |
\" | " |
\\ | \ |
\(在行尾时) | 续行符 |
\a | 响铃 |
\b | 退格(Backspace) |
\000 | 空 |
2> 使用三引号('''和""")
可以使用三引号指定多行字符串,例如:
1 '''
2 this is first line
3 'this is second line'
4 "this is third line"
5 '''
6 #可以在多行字符串里面使用'单引号'或"双引号"
7
8 """
9 this is first line
10 'this is second line'
11 "this is third line"
12 """
3> Unicode 字符串
python解释器在加载.py文件中的代码时,会对内容进行编码(默认为ascii)
ASCII编码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用8位来表示(一个字节),即2**8 = 256-1,所以ASCII编码最多只能表示255个符号。
关于中文
为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。
GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。
GB2312 支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。2000年的 GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。
从ASCII、GB2312、GBK 到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集 (DBCS)。
有的中文Windows的缺省内码还是GBK,可以通过GB18030升级包升级到GB18030。不过GB18030相对GBK增加的字符,普通人是很难用到的,通常我们还是用GBK指代中文Windows内码。
显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,
注:此处说的的是最少2个字节,可能更多
UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...
所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果是如下代码的话:
报错:ascii码无法表示中文
1 #!/usr/bin/env python
2
3 print "你好,世界"
改正:应该显示的告诉python解释器,用什么编码来执行源代码,即:
1 #!/usr/bin/env python
2 #-*- coding: utf-8 -*-
3
4 print "你好,世界"
1.1.3 布尔值
布尔值通常用来判断条件是否成立。python包含两个布尔值,包含:True(逻辑真)和False(逻辑假)。布尔值区分大小写,也就是说true和TRUE不能等同于True。
1.1.4 空值
python有一个特殊的空值常量None。与0和空字符串("")不同,None表示什么都没有;None与任何其他的数据类型比较永远返回False。
1.2 变量
变量是内存中命名的存储位置,与常量不同的是变量的值是可以动态变化的;python中变量的命名规则如下:
- 变量的名字的第1个字符必须是字母或下划线(_);
- 变量的名字的第1个字符后边可以使由字母、下划线(_)、或数字(0~9)组成;
- 变量的名字是区分大小写的,也就是说Score和score是不同的;
- 在python中对变量进行赋值时,使用单引号和双引号的效果是完全一样的;
- python中已经被使用的一些关键字不能用于声明变量;
注:python的变量不需要声明,可以直接使用赋值运算符对其进行赋值操作,根据所赋的值来决定其数据类型;
python中已经被使用的关键字包含:['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
1 a = "这是一个变量"
2
3 b = 2
4
5 c = True
6
7 #分别定义了3个变量,字符串变量a、数值变量b、布尔值变量c;
1 #也可以将变量赋值给另一个变量
2 name = "Jim Green"
3 name2 = name
4 print(name,name2)
5 name ="Lucy"
6 print("What is the value of name2 now ?)
7 注:name 变量赋值后,name2变量赋值为name变量时,name2变量指向的是name变量存放在内存中的值,而非name变量的指针,故当name变量被重新赋值后,name2变量的值并不会跟着改变。
注:每个变量都对应着一块内存空间,因此每个变量都有一个内存地址,变量复制实际就是将该变量的地址指向复制给它的常量或变量的地址;
id函数
可以使用id函数输出变量的地址,语法如下:
1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3
4
5 str1 = "这是一个变量"
6 print("变量str1的值是:"+str1)
7 print("变量str1的地址是:%d" %(id(str1)))
8 str2 = str1
9 print("变量str2的值是:"+str2)
10 print("变量str2的地址是:%d" %(id(str2)))
11 str1 = "这是另外一个变量"
12 print("变量str1的值是:"+str1)
13 print("变量str1的地址是:%d" %(id(str1)))
14 print("变量str2的值是:"+str2)
15 print("变量str2的地址是:%d" %(id(str2)))
16
17
18 #输出结果如下:
19 变量str1的值是:这是一个变量
20 变量str1的地址是:2084920022448
21 变量str2的值是:这是一个变量
22 变量str2的地址是:2084920022448
23 变量str1的值是:这是另外一个变量
24 变量str1的地址是:2084913135312
25 变量str2的值是:这是一个变量
26 变量str2的地址是:2084920022448
1.3 常量与变量的数据类型转换
python 在定义变量时,不需要指定其数据类型,而是根据每次给变量所赋的值决定其数据类型,但也可以使用一组函数对常量和变量进行类型转换,以便对它们进行相应的操作。
1.3.1 转换为数字
可以将字符串常量或变量转换为数字,包含如下的情形。
1>使用int()函数将字符串转换为整数,语法如下:
1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
4 a = "100"
5 print(int(a))
6 print(int(a,base=8))
7 print(int(a,base=10))
8 print(int(a,base=16))
9
10 结果输出:
11 100
12 64
13 100
14 256
int(x,base=)
参数x是待转换的字符串,参数base为可选参数,指定转换后整数的禁止,默认为十进制。
2> 使用long()函数将字符串转换为长整数,语法如下:
long(x,base)
参数的含义与int()函数相同。
3> 使用float()函数将字符串或数字转换为浮点数,语法如下:
float(x)
x为待转换的字符串或数字;
#!/usr/bin/env python
# -*- coding:utf-8 -*-
a = "100"
print(float(a))
print(float(222222))
输出结果为:
100.0
222222.0
4>使用eval()函数计算字符串中的有效python表达式,并返回结果,语法如下:
eval(str)
参数str为待计算的Python表达式字符串。
1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3
4 a = "1+2"
5
6 print(eval(a))
7
8 输出结果:
9 3
1.3.2 转换为字符串
可以将数字常量或变量转换为字符串,包含如下情形:
1> 使用str()函数将数值转换为字符串,语法如下:
str(x)
参数x为待转换的数值。
2> 使用repr()函数将对象转换为可打印字符串,语法如下:
repr(obj)
参数obj是待转换的对象。
3> 使用chr()函数将一个整数转换为可对应ASCII的字符,语法如下:
chr(整数)
4> 使用ord()函数将一个字符转换为对应的ASCII的字符,语法如下:
ord(字符)
1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 # Author:tx.shi
4 print(str(100.0))
5 print(chr(100))
6 print(ord('A'))
7 print(ord('$'))
8 print(ord('#'))
9
10 输出结果:
11 100.0 为字符串
12 d 为整数100的ACSII字符
13 65 为A的ACSII字符
14 36 为$的ACSII
15 35 为#的ACSII
1.3.3 转换为十六进制字符串和八进制字符串
1> 使用hex()函数将一个整数转换为一个十六进制字符串,语法如下:
hex(整数)
2> 使用oct()函数将一个整数转换为一个八进制字符串,语法如下:
oct(字符)
1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3
4 print(hex(100))
5 print(oct(100))
6
7 print(hex(8))
8 print(oct(8))
9
10
11 print(hex(16))
12 print(oct(16))
输出结果为:
0x64
0o144
0x8
0o10
0x10
0o20
注:十六进制字符串以0x开头,八进制字符串以0o开头
1.4 注释:
当前行注释:使用 #被注释内容
多行注释:使用3个单引号或者3个双引号均可以 ''''''被注释内容''''''
注:3个单引号或者3个双引号还可以被用于打印多行场景,代码如下:
1 #!/usr/bin/env python
2 #-*- coding: utf-8 -*-
3
4 msg = '''
5 This is test print Multi line !
6 This is test print Multi line !
7 This is test print Multi line !
8 This is test print Multi line !
9 '''
10 print (msg)