Python
使用等号(=
)作为赋值运算符,例如a = 20
就是一条赋值语句,这条语句用于将20
装入变量a
中,这个过程就被称为赋值,即将 20
赋值给变量a
。
注意,变量名其实就是标识符,因此在命名时,既要遵守Python 标识符命名规范,还要避免和Python 内置函数以及Python 保留字重名。
以C
语言为例:
int a = 20
这行C
语言代码的意思是,声明一个整形变量a
来存储整数20
,这就意味着,我们无法用a
存储小数、字符以及字符串等其他类型数据,这类编程语言被称为强类型语言。
和强类型语言相对应的是弱类型语言
- 变量无须声明即可直接赋值,对一个不存在的变量赋值就相当于定义了一个新变量。
- 变量的数据类型可以动态改变:同一个变量可以一会儿被赋值为整数值,一会儿被赋值为字符串。
#定义一个数值类型变量
a = 5
print(a)
#重新将字符串赋值给a变量
a = 'Hello , Charlie'
print(a)
print(type(a))
输出结果:
5
Hello , Charlie
<type 'str'>
整型
整形专门用来表示整数,即没有小数部分的数。在Python
中,整数包括正整数、0 和负整数。
#定义变量a,赋值为56
a = 56
print(a)
#为a赋值一个大整数
a = 9999999999999999999999
print(a)
#type()函数用于返回变量的类型
print(type (a))
使用Python 3.x
运行上面程序,可以看到如下输出结果:
56
9999999999999999999999
<class 'int'>
Python
的整型数值有 4 种表示形式:
- 十进制形式:最普通的整数就是十进制形式的整数,在使用十进制表示整数值时,不能以
0
(零)作为十进制数的开头(数值是0
除外)。 - 二进制形式:由
0
和1
组成,以0b
或0B
开头。例如,101
对应十进制数是5
; - 八进制形式:八进制整数由
0~7
组成,以0o
或0O
开头(第一个字母是零,第二个字母是大写或小写的O
)。需要注意的是,在Python 2.x
中,八进制数值还可以直接以0
(零)开头。 - 十六进制形式:由
0~9
以及A~F
(或a~f
)组成,以0x
或0X
开头
#以0x或0X开头的整型数值是十六进制形式的整数
hex_value1 = 0x13
hex_value2 = 0XaF
print("hexValue1 的值为:",hex_value1)
print("hexValue2 的值为:",hex_value2)
#以0b或0B开头的整型数值是二进制形式的整数
bin_val = 0b111
print('bin_val的值为:',bin_val)
bin_val = 0B101
print('bin_val的值为:',bin_val)
#以0o或0O开头的整型数值是八进制形式的整数
oct_val = 0o54
print('oct_val 的值为:',oct_val)
oct_val = 0O17
print('oct_val 的值为:',oct_val)
浮点型
浮点型数值用于保存带小数点的数值,Python
的浮点数有两种表示形式:
- 十进制形式:这种形式就是平常简单的浮点数,例如
5.12
、512.0
、0.512
。浮点数必须包含一个小数点,否则会被当成整数类型处理。 - 科学计数形式:例如
5.12e2
(即5.12×102
)、5.12E2
(也是5.12 ×102
)。
af1 = 5.2345556
#输出af1的值
print("af1的值为:",af1)
af2 = 25.2345
print("af2的类型为:",type(af2))
f1=5.12e2
print("f1的值为:",f1)
f2 = 5e3
print("f2的值为:",f2)
print("f2的类型为:",type(f2))#看到类型为float
, 通过第 8 行代码可以看出,虽然5e3
的值是5000
,但它依然是浮点型值,而不是整型值,因为Python
会自动将该数值变为5000.0
。
字符串
Python
要求,字符串必须使用引号括起来,可以使用单引号或者双引号,只要成对即可。字符串中的内容几乎可以包含任何字符,英文字符也行,中文字符也行。
str1 = 'c.biancheng.net'
str2 = "C语言中文网"
print(str1)
print(str2)
如果字符串内容本身包含了单引号或双引号,此时就需要进行特殊处理:
- 使用不同的引号将字符串括起来。
- 对引号进行转义。
假如字符串内容中包含了单引号,则可以使用双引号将字符串括起来。
str3 = "I'm a coder"
print(str3)
假如字符串内容本身包含双引号,则可使用单引号将字符串括起来 。
str4 = '"Spring is here,let us jam!", said woodchuck.'
假如字符串既包含单引号,又包含双引号,此时就可以使用转义字符, Python 允许使用反斜线(\)将字符串中的特殊字符进行转义。
str5 = '"we are scared,Let\'s hide in the shade",says the bird'
Python
允许使用转义字符(\
)对换行符进行转义,转义之后的换行符不会“中断”字符串, 故程序使用了转义字符(\
)对内容进行了转义,这样就可以把一个字符串写成两行。
s2 = 'The quick brown fox \
jumps over the lazy dog'
print(s2)
长字符串
Python
使用三个引号(单引号、双引号都行)来包含多行注释内容,其实这是长字符串的写法,只是由于在长字符串中可以放置任何内容,包括放置单引号、双引号都可以,如果所定义的长字符串没有赋值给任何变量,那么这个字符串就相当于被解释器忽略了,也就相当于注释掉了。
实际上,使用三个引号括起来的长字符串完全可以赋值给变量,例如如下程序:
s = '''"Let's go fishing", said Mary.
"OK, Let's go", said her brother.
they walked to a lake'''
print(s)
使用三个引号定义了长字符串,该长字符串中既可包含单引号,也可包含双引号。
原始字符串
由于字符串中的反斜线都有特殊的作用,因此当字符串中包含反斜线时,就需要使用转义字符\
对字符串中包含的每个'\'
进行转义。
比如说,我们要写一个关于Windows
路径G:\publish\codes\02\2.4
这样的字符串,如果在Python
程序中直接这样写肯定是不行的,需要使用\
转义字符,对字符串中每个'\'
进行转义,即写成G:\\publish\\codes\\02\\2.4
这种形式才行。
原始字符串以“r”
开头,它不会把反斜线当成特殊字符。因此,上面的Windows
路径可直接写成如下这种形式:
s1 = r'G:\publish\codes\02\2.4'
print(s1)
Python
的字符编码
Python
默认采用UTF-8
编码, 但它也提供了encode()
方法,可以轻松实现将Unicode
编码格式的字符串转化为其它编码格式。
bytes
类型
Python
3 新增了bytes
类型,用于代表字节串。字符串(str
)由多个字符组成,以字符为单位进行操作;字节串(bytes
)由多个字节组成,以字节为单位进行操作。
如果希望将一个字符串转换成bytes
对象,有如下三种方式:
- 如果字符串内容都是
ASCII
字符,则可以通过直接在字符串之前添加b
来构建字节串值。 - 调用
bytes()
函数(其实是bytes
的构造方法)将字符串按指定字符集转换成字节串,如果不指定字符集,默认使用UTF-8
字符集。 - 调用字符串本身的
encode()
方法将字符串按指定字符集转换成字节串,如果不指定字符集,默认使用UTF-8
字符集。
# 创建一个空的bytes
b1 = bytes()
# 创建一个空的bytes值
b2 = b''
# 通过b前缀指定hello是bytes类型的值
b3 = b'hello'
print(b3)
print(b3[0])
print(b3[2:4])
# 调用bytes方法将字符串转成bytes对象
b4 = bytes('我爱Python编程',encoding='utf-8')
print(b4)
# 利用字符串的encode()方法编码成bytes,默认使用utf-8字符集
b5 = "学习Python很有趣".encode('utf-8')
print(b5)
运行上面程序,可以看到如下输出结果:
b'hello'
104
b'll'
b'\xe6\x88\x91\xe7\x88\xb1Python\xe7\xbc\x96\xe7\xa8\x8b'
b'\xe5\xad\xa6\xe4\xb9\xa0Python\xe5\xbe\x88\xe6\x9c\x89\xe8\xb6\xa3'
bool
布尔类型
Python
提供了bool
类型来表示真(对)或假(错)。
比如常见的5 > 3
比较算式,这个是正确的,在程序世界里称之为真(对),Python
使用True
来代表;
再比如4 > 20
比较算式,这个是错误的,在程序世界里称之为假(错),Python
使用False
来代表。
>>> 5>3
True
>>> 4>20
False
input()
函数
input()
函数用于向用户生成一条提示,然后获取用户输入的内容。由于input()
函数总会将用户输入的内容放入字符串中,因此用户可以输入任何内容,input()
函数总是返回一个字符串。
例如如下程序:
msg = input("请输入你的值:")
print (type(msg))
print(msg)
第一次运行该程序,我们输入一个整数,运行过程如下:
请输入你的值:2
<class 'str'>
2
第二次运行该程序,我们输入一个浮点数,运行过程如下:
请输入你的值: 1.2
<class 'str'>
1.2
第三次运行该程序,我们输入一个字符串,运行过程如下:
请输入你的值:Hello
<class 'str'>
Hello
print()
函数
前面print()
函数时,都只输出了一个变量,但实际上print()
函数完全可以同时输出多个变量,而且它具有更多丰富的功能。
user_name = 'Charlie'
user_age = 8
#同时输出多个变量和字符串
print("读者名:",user_name,"年龄:",user_age)
运行上面代码,可以看到如下输出结果:
读者名: Charlie 年龄: 8
从输出结果来看,使用print()
函数输出多个变量时,print()
函数默认以空格隔开多个变量,如果读者希望改变默认的分隔符,可通过sep
参数进行设置。例如输出语句:
#同时输出多个变量和字符串,指定分隔符
print("读者名:",user_name,"年龄:",user_age,sep='|')
运行上面代码,可以看到如下输出结果:
读者名:|Charlie|年龄:|8
在默认情况下,print()
函数输出之后总会换行,这是因为print()
函数的end
参数的默认值是“\n”
,这个“\n”
就代表了换行。如果希望print()
函数输出之后不会换行,则重设end
参数即可,例如如下代码:
#设置end 参数,指定输出之后不再换行
print(40,'\t',end="")
print(5O,'\t',end="")
print(60,'\t',end="")
上面三条print()
语句会执行三次输出,但由于它们都指定了end=""
,因此每条print()
语句的输出都不会换行,依然位于同一行。运行上面代码,可以看到如下输出结果:
40 50 60
file
参数指定print()
函数的输出目标,file
参数的默认值为sys.stdout
,该默认值代表了系统标准输出,也就是屏幕,因此print()
函数默认输出到屏幕。实际上,完全可以通过改变该参数让print()
函数输出到特定文件中,例如如下代码:
f = open("demo.txt","w")
#打开文件以便写入
print('沧海月明珠有泪',file=f)
print('蓝回日暖玉生烟',file=f)
f.close()
上面程序中,open()
函数用于打开demo.txt
文件,接连 2 个print
函数会将这 2 段字符串依次写入此文件,最后调用close()
函数关闭文件。
格式化输出
Python
提供了“%”
对各种类型的数据进行格式化输出,例如如下代码:
price = 108
print ("the book's price is %s" % price)
user = "Charli"
age = 8
# 格式化字符串有两个占位符,第三部分提供2个变量
print("%s is a %s years old boy" % (user , age))
上面程序中的print
函数包含以下三个部分,第一部分是格式化字符串(相当于字符串模板),该格式化字符串中包含一个“%s”
占位符,它会被第三部分的变量或表达式的值代替;第二部分固定使用“%”
作为分隔符。
格式化字符串中的“%s”
被称为转换说明符(Conversion Specifier
),其作用相当于一个占位符,它会被后面的变量或表达式的值代替。“%s”
指定将变量或值使用str()
函数转换为字符串。
如果格式化字符串中包含多个“%s”
占位符,第三部分也应该对应地提供多个变量,并且使用圆括号将这些变量括起
1、当使用上面的转换说明符时,可指定转换后的最小宽度,例如如下代码:
num = -28
print("num is: %6i" % num)
print("num is: %6d" % num)
print("num is: %6o" % num)
print("num is: %6x" % num)
print("num is: %6X" % num)
print("num is: %6s" % num)
运行上面代码,可以看到如下输出结果:
num is: -28
num is: -28
num is: -34
num is: -1c
num is: -1C
num is: -28
从上面的输出结果可以看出,此时指定了字符串的最小宽度为6
,因此程序转换数值时总宽度为6
,程序自动在数值前面补充了三个空格。
**2、**在默认情况下,转换出来的字符串总是右对齐的,不够宽度时左边补充空格。Python
也允许在最小宽度之前添加一个标志来改变这种行为,Python
支持如下标志:
- ``:指定左对齐。
+
:表示数值总要带着符号(正数带“+”
,负数带“-”
)。0
:表示不补充空格,而是补充0
。
例如如下代码:
num2 = 30
# 最小宽度为0,左边补0
print("num2 is: %06d" % num2)
# 最小宽度为6,左边补0,总带上符号
print("num2 is: %+06d" % num2)
# 最小宽度为6,右对齐
print("num2 is: %-6d" % num2)
运行上面代码,可以看到如下输出结果:
num2 is: 000030
num2 is: +00030
num2 is: 30
**3、**对于转换浮点数,Python
还允许指定小数点后的数字位数:如果转换的是字符串,Python
允许指定转换后的字符串的最大字符数。这个标志被称为精度值
my_value = 3.001415926535
# 最小宽度为8,小数点后保留3位
print("my_value is: %8.3f" % my_value)
# 最小宽度为8,小数点后保留3位,左边补0
print("my_value is: %08.3f" % my_value)
# 最小宽度为8,小数点后保留3位,左边补0,始终带符号
print("my_value is: %+08.3f" % my_value)
the_name = "Charlie"
# 只保留3个字符
print("the name is: %.3s" % the_name)
# 输出Cha# 只保留2个字符,最小宽度10
print("the name is: %10.2s" % the_name)
运行上面代码,可以看到如下输出结果:
my_value is: 3.001
my_value is: 0003.001
my_value is: +003.001
the name is: Cha
the name is: Ch