如果想要深入学习python,推荐进入官网教程进行学习:https://docs.python.org/zh-cn/3/tutorial/
1. 基础语法
1.1 标识符
- 第一个字符必须是字母表中字母或下划线 _ 。
- 标识符的其他的部分由字母、数字和下划线组成。
- 标识符对大小写敏感。
在 Python 3 中,可以用中文作为变量名,非 ASCII 标识符也是允许的了。如下:
我 = 3
print(我)
输出:
3
1.2 python保留字
保留字即关键字,我们不能把它们用作任何标识符名称。Python 的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字:
import keyword
print(keyword.kwlist)
输出:
[‘False’, ‘None’, ‘True’, ‘and’, ‘as’, ‘assert’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘finally’, ‘for’, ‘from’, ‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘nonlocal’, ‘not’, ‘or’, ‘pass’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’]
1.3 注释
- 单行注释
# 第一个注释
print("Hello, Python!") # 第二个注释
- 多行注释
"""
这是多行注释!!!
这是多行注释!!!
"""
print ("Hello, Python!")
1.4 行与缩进
python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {} 。缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。实例如下:
if True:
print ("True")
else:
print ("False")
1.5 多行语句
Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠()来实现多行语句,例如:
total = item_one + \
item_two + \
item_three
在 [], {}, 或 () 中的多行语句,不需要使用反斜杠(),例如:
total = ['item_one', 'item_two', 'item_three',
'item_four', 'item_five']
1.6 数字(Number)类型
python中数字有四种类型:整数、布尔型、浮点数和复数。
- int (整数), 如 1, 只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。
- bool (布尔), 如 True。
- float (浮点数), 如 1.23、3E-2
- complex (复数), 如 1 + 2j、 1.1 + 2.2j
1.7 字符串(String)
- python中单引号和双引号使用完全相同。
- 使用三引号(’’'或""")可以指定一个多行字符串。
- 转义符 ‘’
- 反斜杠可以用来转义,使用r可以让反斜杠不发生转义。。 如 r"this is a line with \n" 则\n会显示,并不是换行。
- 按字面意义级联字符串,如"this " "is " "string"会被自动转换为this is string。
- 字符串可以用 + 运算符连接在一起,用 * 运算符重复。
- Python 中的字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始。
- Python中的字符串不能改变。
- Python 没有单独的字符类型,一个字符就是长度为 1 的字符串。
- 字符串的截取的语法格式如下:变量[头下标:尾下标:步长]
str = 'Runoob'
print(str) # 输出字符串
print(str[0:-1]) # 输出第一个到倒数第二个的所有字符
print(str[0]) # 输出字符串第一个字符
print(str[2:5]) # 输出从第三个开始到第五个的字符
print(str[2:]) # 输出从第三个开始后的所有字符
print(str[1:5:2]) # 输出从第二个开始到第五个且每隔两个的字符
print(str * 2) # 输出字符串两次
print(str + '你好') # 连接字符串
print('------------------------------')
print('hello\nrunoob') # 使用反斜杠(\)+n转义特殊字符
print(r'hello\nrunoob') # 在字符串前面添加一个 r,表示原始字符串,不会发生转义
输出:
Runoob
Runoo
R
noo
noob
uo
RunoobRunoob
Runoob你好
------------------------------
hello
runoob
hello\nrunoob
1.8 空行
书写时不插入空行,Python解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。
1.9 等待用户输入
input("\n\n按下 enter 键后退出。")
1.10 同一行显示多条语句
Python可以在同一行中使用多条语句,语句之间使用分号(;)分割。
import sys; x = 'runoob'; sys.stdout.write(x + '\n')
输出:
runoob
1.11 多个语句组成代码组
python缩进相同的一组语句构成一个代码块,我们称之为代码组。
像if、while、def和class这样的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组。
if expression :
suite
elif expression :
suite
else :
suite
1.12 print输出
print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end="":
x = "a"
y = "b"
# 换行输出
print(x)
print(y)
print('---------')
# 不换行输出
print(x, end=" ")
print(y, end=" ")
print()
输出:
a
b
---------
a b
1.13 import与from…import
- 将整个模块(somemodule)导入,格式为: import somemodule
- 从某个模块中导入某个函数,格式为: from somemodule import somefunction
- 从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc
- 将某个模块中的全部函数导入,格式为: from somemodule import *
加入模块时,使用函数时需要加入模块名,加入函数则不需要模块的名字:
import sys
print ('\n python 路径为',sys.path)
from sys import path # 导入特定的成员
print('path:',path) # 因为已经导入path成员,所以此处引用时不需要加sys.path
2. 基本数据类型
Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。
counter = 100 # 整型变量
miles = 1000.0 # 浮点型变量
name = "runoob" # 字符串
print (counter)
print (miles)
print (name)
还可以通过下列方式对变量赋值:
a = b = c = 1 # 创建一个整型对象,值为 1,从后向前赋值,三个变量被赋予相同的数值。
a, b, c = 1, 2, "runoob" #两个整型对象 1 和 2 的分配给变量 a 和 b,字符串对象 "runoob" 分配给变量 c。
python3中有6个标准数据类型:
- 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
- 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
可以使用type()函数查询变量所指的对象类型。
a, b, c, d = 20, 5.5, True, 4+3j
print(type(a), type(b), type(c), type(d))
输出:
<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
此外还可以用 isinstance 来判断:
a = 111
b = isinstance(a, int)
print(b) # 输出true
type()不会认为子类是一种父类类型。isinstance()会认为子类是一种父类类型。
2.1 Number数字
2.1.1 数字的表示形式
Python3 支持 int、float、bool、complex(复数)。
- int(x) 将x转换为一个整数。
- float(x) 将x转换到一个浮点数。
- complex(x) 将x转换到一个复数,实数部分为 x,虚数部分为 0。
- complex(x, y) 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。x 和 y 是数字表达式。
除了标准类型外,还可以使用十六进制和八进制来代表整数:
number = 0xA0F # 十六进制
print(number)
number = 0o37 # 八进制
print(number)
输出:
2575
31
float的表示可以使用小数形式也可以使用E表示法
a = -32.54e100
b = 32.3e+18
c = 70.2E-12
d = 15.4
复数可以使用a+bj,或者complex(a, b)表示
b = 9.322e-36j
print(b)
a = complex(3, 3.4)
print(a)
2.1.2 算术运算
>>> 5 + 4 # 加法
9
>>> 4.3 - 2 # 减法
2.3
>>> 3 * 7 # 乘法
21
>>> 2 / 4 # 除法,得到一个浮点数
0.5
>>> 2 // 4 # 除法,丢弃小数部分,得到的类型和分子分母形式有关
0
>>> 17 % 3 # 取余
2
>>> 2 ** 5 # 乘方
32
一个变量可以通过赋值指向不同类型的对象。
a = 3
print(type(a))
a = 3.2 #改为float类型
print(type(a))
输出:
<class 'int'>
<class 'float'>
2.1.3 数学函数
abs(x) | 返回数字的绝对值,如abs(-10) 返回 10,可以是整数、浮点数和复数,内置函数 |
ceil(x) | 返回数字的上入整数,如math.ceil(4.1) 返回 5 |
floor(x) | 返回数字的下舍整数,如math.floor(4.9)返回 4 |
exp(x) | 返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045 |
fabs(x) | 返回数字的绝对值,如math.fabs(-10) 返回10.0,不能用于复数 |
log(x) | 如math.log(math.e)返回1.0,math.log(100,10)返回2.0 |
log10(x) | 返回以10为基数的x的对数,如math.log10(100)返回 2.0 |
max(x1, x2,…) | 返回给定参数的最大值,参数可以为序列。 |
min(x1, x2,…) | 返回给定参数的最小值,参数可以为序列。 |
pow(x, y) | x**y 运算后的值。 |
sqrt(x) | 返回数字x的平方根。 |
sin(x) | 返回的x弧度的正弦值。 |
asin(x) | 返回x的反正弦弧度值。 |
degrees(x) | 将弧度转换为角度,如degrees(math.pi/2) , 返回90.0 |
radians(x) | 将角度转换为弧度 |
pi | 数学常量 pi(圆周率,一般以π来表示) |
e | 数学常量 e,e即自然常数(自然常数)。 |
2.2 字符串
上面1.7中已经介绍了部分string类型。
Python中的字符串用单引号 ’ 或双引号 " 括起来,同时使用反斜杠 \ 转义特殊字符。Python 访问子字符串,可以使用方括号 [] 来截取字符串,字符串的截取的语法格式如下:
变量[头下标:尾下标]
2.2.1 字符串运算符
下表实例变量 a 值为字符串 “Hello”,b 变量值为 “Python”:
2.2.2 字符串格式化
python字符串格式化符号:
符号 | 描述 |
---|---|
%c | 格式化字符及其ASCII码 |
%s | 格式化字符串 |
%d | 格式化整数 |
%u | 格式化无符号整型 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数(大写) |
%f | 格式化浮点数字,可指定小数点后的精度 |
%e | 用科学计数法格式化浮点数 |
%E | 作用同%e,用科学计数法格式化浮点数 |
%g | %f和%e的简写 |
%G | %f 和 %E 的简写 |
%p | 用十六进制数格式化变量的地址 |
格式化操作符辅助指令:
符号 | 功能 |
---|---|
* | 定义宽度或者小数点精度 |
- | 用做左对齐 |
+ | 在正数前面显示加号( + ) |
<sp> | 在正数前面显示空格 |
# | 在八进制数前面显示零(‘0’),在十六进制前面显示’0x’或者’0X’(取决于用的是’x’还是’X’) |
0 | 显示的数字前面填充’0’而不是默认的空格 |
% | ‘%%‘输出一个单一的’%’ |
(var) | 映射变量(字典参数) |
m.n. | m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话) |
例如:
print ("我叫 %s 今年 %d 岁!" % ('小明', 10))
输出:
我叫 小明 今年 10 岁!
2.2.3 三引号
python三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。实例如下:
para_str = """这是一个多行字符串的实例
多行字符串可以使用制表符
TAB ( \t )。
也可以使用换行符 [ \n ]。
"""
print (para_str)
输出:
这是一个多行字符串的实例
多行字符串可以使用制表符
TAB ( )。
也可以使用换行符 [
]。
三引号让程序员从引号和特殊字符串的泥潭里面解脱出来,自始至终保持一小块字符串的格式是所谓的WYSIWYG(所见即所得
)格式的。
一个典型的用例是,当你需要一块HTML或者SQL时,这时用字符串组合,特殊字符串转义将会非常的繁琐。
errHTML = '''
<HTML><HEAD><TITLE>
Friends CGI Demo</TITLE></HEAD>
<BODY><H3>ERROR</H3>
<B>%s</B><P>
<FORM><INPUT TYPE=button VALUE=Back
ONCLICK="window.history.back()"></FORM>
</BODY></HTML>
'''
cursor.execute('''
CREATE TABLE users (
login VARCHAR(8),
uid INTEGER,
prid INTEGER)
''')
2.2.4 f-string
f-string 是 python3.6 之后版本添加的,称之为字面量格式化字符串,是新的格式化字符串的语法。
f-string 格式化字符串以 f 开头,后面跟着字符串,字符串中的表达式用大括号 {} 包起来,它会将变量或表达式计算后的值替换进去,实例如下:
name = 'Runoob'
a = f'Hello {name}' # 替换变量
b = f'{1+2}' # 使用表达式
print(a)
print(b)
输出:
Hello Runoob
3
2.2.5 Unicode字符串
在Python2中,普通字符串是以8位ASCII码进行存储的,而Unicode字符串则存储为16位unicode字符串,这样能够表示更多的字符集。使用的语法是在字符串前面加上前缀 u。
在Python3中,所有的字符串都是Unicode字符串。
2.2.6 字符串的内建函数
函数 | 解释 |
---|---|
capitalize() | 将字符串的第一个字符转换为大写 |
count(str, beg= 0,end=len(string)) | 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数 |
find(str, beg=0, end=len(string)) | 检测 str 是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1 |
isalnum() | 如果字符串至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False |
isalpha() | 如果字符串至少有一个字符并且所有字符都是字母或中文字则返回 True, 否则返回 False |
isdigit() | 如果字符串只包含数字则返回 True 否则返回 False… |
islower() | 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False |
isnumeric() | 如果字符串中只包含数字字符,则返回 True,否则返回 False |
isupper() | 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False |
len(string) | 返回字符串长度 |
max(str) | 返回字符串 str 中最大的字母。 |
min(str) | 返回字符串 str 中最小的字母。 |
isdecimal() | 检查字符串是否只包含十进制字符,如果是返回 true,否则返回 false。 |
2.3 列表
序列是 Python 中最基本的数据结构。序列中的每个值都有对应的位置值,称之为索引,第一个索引是 0,第二个索引是 1,依此类推。Python 有 6 个序列的内置类型,但最常见的是列表和元组。
2.3.1 定义和访问
列表是最常用的 Python 数据类型,它可以作为一个方括号内的逗号分隔值出现。列表的数据项不需要具有相同的类型。举例如下:
list1 = ['Google', 'Runoob', 1997, 2000]
list2 = [1, 2, 3, 4, 5 ]
list3 = ["a", "b", "c", "d"]
list4 = ['red', 'green', 'blue', 'yellow', 'white', 'black']
定义和访问形式如下:
list = ['red', 'green', 'blue', 'yellow', 'white', 'black']
print( list[-1] ) # 输出:black
print(list[0])# 输出:red
print(list[0:2]) # 左闭右开,输出:['red', 'green']
2.3.2 添加、更新和删除
添加append在后面介绍,下面介绍更新和删除
list = ['Google', 'Runoob', 1997, 2000]
print("第三个元素为 : ", list[2])
list[2] = 2001 #更新数据
print("更新后的第三个元素为 : ", list[2])
print ("原始列表 : ", list)
del list[2]# 删除
print ("删除第三个元素后 : ", list)
输出:
第三个元素为 : 1997
更新后的第三个元素为 : 2001
原始列表 : ['Google', 'Runoob', 2001, 2000]
删除第三个元素后 : ['Google', 'Runoob', 2000]
2.3.3 python列表脚本操作符
Python 表达式 | 结果 | 描述 |
---|---|---|
len([1, 2, 3]) | 3 | 长度 |
[1, 2, 3] + [4, 5, 6] | [1, 2, 3, 4, 5, 6] | 组合,拼接 |
[‘Hi!’] * 4 | [‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’] | 重复 |
3 in [1, 2, 3] | True | 元素是否存在于列表中 |
for x in [1, 2, 3]: print(x, end=" ") | 1 2 3 | 迭代 |
2.3.4 嵌套列表
a = ["a", "b", "c"]
n = [1, 2, 3]
x = [a, n]# 嵌套
print(x)
print(x[0])
输出:
[['a', 'b', 'c'], [1, 2, 3]]
['a', 'b', 'c']
2.3.5 列表函数和方法
python包含以下函数:
函数 | 说明 |
---|---|
len(list) | 列表元素个数 |
max(list) | 返回列表元素最大值 |
min(list) | 返回列表元素最小值 |
list(seq) | 将元组转换为列表 |
python包含以下方法:
方法 | 说明 |
---|---|
list.append(obj) | 在列表末尾添加新的对象 |
list.count(obj) | 统计某个元素在列表中出现的次数 |
list.extend(seq) | 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) |
list.index(obj) | 从列表中找出某个值第一个匹配项的索引位置 |
list.insert(index, obj) | 将对象插入列表 |
list.pop([index=-1]) | 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 |
list.remove(obj) | 移除列表中某个值的第一个匹配项 |
list.reverse() | 反向列表中元素 |
list.sort( key=None, reverse=False) | 对原列表进行排序 |
list.clear() | 清空列表 |
list.copy() | 复制列表 |
2.4 元组
Python 的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号 ( ),列表使用方括号 [ ]。
2.4.1 元组的定义和访问
定义形式如下:
tup1 = ('Google', 'Runoob', 1997, 2000)
tup2 = "a", "b", "c", "d" # 不需要括号也可以
tup3 = () #创建空元组
print(tup1)
print(tup2)
print(tup3)
输出:
('Google', 'Runoob', 1997, 2000)
('a', 'b', 'c', 'd')
()
元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用:
>>> tup1 = (50)
>>> type(tup1) # 不加逗号,类型为整型
<class 'int'>
>>> tup1 = (50,)
>>> type(tup1) # 加上逗号,类型为元组
<class 'tuple'>
元组可以使用下标索引来访问元组中的值,如下实例:
tup1 = ('Google', 'Runoob', 1997, 2000)
tup2 = (1, 2, 3, 4, 5, 6, 7)
print("tup1[0]: ", tup1[0])
print("tup2[1:5]: ", tup2[1:5])
输出:
tup1[0]: Google
tup2[1:5]: (2, 3, 4, 5)
2.4.2 元组的拼接和删除整个元组
可以使用"+"对元组进行拼接。元组不允许修改和删除,但是可以使用del删除整个元组:
tup1 = (12, 34.56)
tup2 = ('abc', 'xyz')
tup3 = tup1 + tup2
print (tup3)
del tup3#删除后,就不能打印tup3,否则会出现报错未定义
2.4.3 元组运算符
Python 表达式 | 结果 | 描述 |
---|---|---|
len((1, 2, 3)) | 3 | 计算元素个数 |
(1, 2, 3) + (4, 5, 6) | (1, 2, 3, 4, 5, 6) | 连接 |
(‘Hi!’,) * 4 | (‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’) | 复制 |
3 in (1, 2, 3) | True | 元素是否存在 |
for x in (1, 2, 3): print (x,) | 1 2 3 | 迭代 |
2.4.4 元组索引和截取
因为元组也是一个序列,所以我们可以访问元组中的指定位置的元素,也可以截取索引中的一段元素。
tup = ('Google', 'Runoob', 'Taobao', 'Wiki', 'Weibo','Weixin')
print(tup[1])
print(tup[-2])
print(tup[1:])
print(tup[1:4])
输出:
Runoob
Weibo
('Runoob', 'Taobao', 'Wiki', 'Weibo', 'Weixin')
('Runoob', 'Taobao', 'Wiki')
2.4.5 元组内置函数
方法 | 描述 |
---|---|
len(tuple) | 计算元组元素个数。 |
max(tuple) | 返回元组中元素最大值。 |
min(tuple) | 返回元组中元素最小值。 |
tuple(iterable) | 将可迭代系列转换为元组。例如列表 |
2.5 字典
字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中 。表示如下:
d = {key1 : value1, key2 : value2, key3 : value3 }
- 键必须是唯一的,但值则不必。如果有两个键,相当于修改键对应的值。
- 值可以取任何数据类型,但键必须是不可变的,如字符串,数字。
- 字典值可以是任何的 python 对象,既可以是标准的对象,也可以是用户定义的,但键不行。
键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行。
2.5.1 定义和访问
dict = {'Name': 'lucy', 'Age': 7, 'Class': 'First'}
print ("dict['Name']: ", dict['Name'])
print ("dict['Age']: ", dict['Age'])
输出:
dict['Name']: lucy
dict['Age']: 7
2.5.2 修改和删除字典
dict = {'Name': 'lucy', 'Age': 7, 'Class': 'First'}
dict['Age'] = 8 # 更新 Age
dict['School'] = "菜鸟教程" # 添加信息
print("添加新元素后:")
print(dict)
del dict['Name'] # 删除键 'Name'
print("删除‘Name’后")
print(dict)
dict.clear#清空字典
del dict #删除字典
输出:
添加新元素后:
{'Name': 'lucy', 'Age': 8, 'Class': 'First', 'School': '菜鸟教程'}
删除‘Name’后
{'Age': 8, 'Class': 'First', 'School': '菜鸟教程'}
2.5.3 字典内置函数和方法
Python字典包含了以下内置函数:
函数 | 描述 |
---|---|
len(dict) | 计算字典元素个数,即键的总数。 |
str(dict) | 输出字典,以可打印的字符串表示。 |
Python字典包含了以下内置方法:
方法 | 描述 |
---|---|
key in dict | 如果键在字典dict里返回true,否则返回false |
radiansdict.clear() | 删除字典内所有元素 |
radiansdict.copy() | 返回一个字典的浅复制 |
radiansdict.items() | 以列表返回可遍历的(键, 值) 元组数组 |
radiansdict.keys() | 返回一个迭代器,可以使用 list() 来转换为列表 |
radiansdict.values() | 返回一个迭代器,可以使用 list() 来转换为列表 |
pop(key[,default]) | 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。 |
popitem() | 随机返回并删除字典中的最后一对键和值。 |
2.6 集合
集合(set)是一个无序的不重复元素序列。可以使用大括号 { } 或者 set() 函数创建集合。
注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
parame = {value01,value02,...}
或者
set(value)
2.6.1 集合的运算
a = {'a', 'r', 'b', 'c', 'd'}
b = set('alacazam')
print("a: ", a)
print("b:", b)
print("a - b: ", a - b)# a中有,b中没有的元素
print("a & b", a & b) #交集
print("a | b", a | b) # 并集
print("a ^ b:", a ^ b) # 不同时包含于a和b的元素
输出:
a: {'d', 'a', 'c', 'r', 'b'}
b: {'l', 'a', 'c', 'z', 'm'}
a - b: {'d', 'r', 'b'}
a & b {'a', 'c'}
a | b {'d', 'm', 'l', 'z', 'a', 'c', 'r', 'b'}
a ^ b: {'d', 'z', 'r', 'l', 'm', 'b'}
2.6.2 添加和删除元素
thisset = set(("Google", "baidu", "Taobao"))
thisset.add("Facebook") # 添加元素
thisset.update({1,3})# 添加元素,参数可以是列表,元组,字典等
thisset.remove("baidu")# 删除元素,不存在则报错
thisset.discard("baidu")# 删除元素,不存在不会报错
thisset.pop()# 随机删除一个元素
print(thisset)
集合内置方法列表:
方法 | 描述 |
---|---|
add() | 为集合添加元素 |
clear() | 移除集合中的所有元素 |
copy() | 拷贝一个集合 |
difference() | 返回多个集合的差集 |
difference_update() | 移除集合中的元素,该元素在指定的集合也存在。 |
discard() | 删除集合中指定的元素 |
intersection() | 返回集合的交集 |
intersection_update() | 返回集合的交集。 |
isdisjoint() | 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。 |
issubset() | 判断指定集合是否为该方法参数集合的子集。 |
issuperset() | 判断该方法的参数集合是否为指定集合的子集 |
pop() | 随机移除元素 |
remove() | 移除指定元素 |
symmetric_difference() | 返回两个集合中不重复的元素集合。 |
symmetric_difference_update() | 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。 |
union() | 返回两个集合的并集 |
update() | 给集合添加元素 |
3. 条件控制
Python中if语句的一般形式如下所示:
if condition_1:
statement_block_1
elif condition_2:
statement_block_2
else:
statement_block_3
1、每个条件后面要使用冒号 :,表示接下来是满足条件后要执行的语句块。
2、使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。
3、在Python中没有switch – case语句。
代码例子:
age = int(input("请输入你家狗狗的年龄: "))
print("")
if age <= 0:
print("你是在逗我吧!")
elif age == 1:
print("相当于 14 岁的人。")
elif age == 2:
print("相当于 22 岁的人。")
elif age > 2:
human = 22 + (age - 2) * 5
print("对应人类年龄: ", human)
### 退出提示
input("点击 enter 键退出")
以下为if中常用的关系运算符:
操作符 | 描述 |
---|---|
< | 小于 |
<= | 小于或等于 |
> | 大于 |
>= | 大于或等于 |
== | 等于,比较两个值是否相等 |
!= | 不等于 |
三个逻辑运算符:
符号 | 说明 | 语法 |
---|---|---|
and | 与 | 两个都成立才返回True 条件1 and 条件2 |
or | 或 | 两个只要有一个满足就返回True 条件1 or 条件2 |
not | 非 | 对条件取反 not 条件 |
4. 循环语句
4.1 while循环
Python 中 while 语句的一般形式:
while 判断条件(condition):
执行语句(statements)……
下列为求和代码:
n = 100
sum = 0
counter = 1
while counter <= n:
sum = sum + counter
counter += 1
print("1 到 %d 之和为: %d" % (n, sum))
输出:
1 到 100 之和为: 5050
4.2 while 循环使用 else 语句
在 while … else 在条件语句为 false 时执行 else 的语句块。语法格式如下:
while <expr>:
<statement(s)>
else:
<additional_statement(s)>
示例代码:
count = 0
while count < 5:
print (count, " 小于 5")
count = count + 1
else:
print (count, " 大于或等于 5")
输出:
0 小于 5
1 小于 5
2 小于 5
3 小于 5
4 小于 5
5 大于或等于 5
4.2 for语句
Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串。
for <variable> in <sequence>:
<statements>
else:
<statements>
下列为列表循环示例:
languages = ["C", "C++", "Perl", "Python"]
for x in languages:
print(x)
输出:
C
C++
Perl
Python
以下 for 实例中使用了 break 语句,break 语句用于跳出当前循环体(还可以使用continue来继续下一次循环):
sites = ["Baidu", "Google","Runoob","Taobao"]
for site in sites:
if site == "Runoob":
print("菜鸟教程!")
break
print("循环数据 " + site)
else:
print("没有循环数据!")
print("完成循环!")
输出:
循环数据 Baidu
循环数据 Google
菜鸟教程!
完成循环!
如果你需要遍历数字序列,可以使用内置range()函数。它会生成数列,例如:
for i in range(5): # 输出0-4
print(i)
for i in range(5,9) : #指定区域遍历5 - 8,左闭右开
print(i)
for i in range(0, 10, 2) :# 0 - 9 ,左闭右开,步长为2(间隔1)
print(i)
for i in range(-10, -100, -30) : #还可以输出负数
print(i)
还可以使用range()创建一个列表:
list(range(5))
python还有pass语句,它不作任何操作,其实就相当于空语句。
5. 迭代器与生成器
5.1 迭代器
迭代是Python最强大的功能之一,是访问集合元素的一种方式。迭代器有两个基本的方法:iter() 和 next()。字符串,列表或元组对象都可用于创建迭代器。
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象
for x in it:
print (x, end=" ")
输出:
1 2 3 4
以上代码也可以通过next()函数实现:
import sys # 引入 sys 模块
list = [1, 2, 3, 4]
it = iter(list) # 创建迭代器对象
while True:
try:
print(next(it))
except StopIteration:
sys.exit()
5.2 迭代器
在 Python 中,使用了 yield 的函数被称为生成器(generator)。跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
import sys
def fibonacci(n): # 生成器函数 - 斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(10) # f 是一个迭代器,由生成器返回生成
while True:
try:
print (next(f), end=" ")
except StopIteration:
sys.exit()
6. 函数
6.1 函数的定义与使用
函数的定义规则如下:
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
- 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号 : 起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。
一个简单的函数定义和调用如下:
def hello() : # 不带参数
print("Hello World!")
def max(a, b):# 带参数
if a > b:
return a
else:
return b
hello()
a = 4
b = 5
print(max(a, b))
6.2 可变与不可变参数
- 不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变 a的值,相当于新生成了 a。
- 可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。
我们知道在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。
python 函数的参数传递:
- 不可变类型:类似 C++ 的值传递,如整数、字符串、元组。如 fun(a),传递的只是 a 的值,没有影响 a 对象本身。如果在 fun(a) 内部修改 a 的值,则是新生成一个 a 的对象。
- 可变类型:类似 C++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后 fun 外部的 la 也会受影响
(1)必需参数
必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
# 可写函数说明
def printme(str):
"打印任何传入的字符串"
print(str)
return
# 调用 printme 函数,不加参数会报错
printme()
(2)关键字参数
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
# 可写函数说明
def printinfo(name, age):
"打印任何传入的字符串"
print("名字: ", name)
print("年龄: ", age)
return
# 调用printinfo函数
printinfo(age=50, name="runoob")
(3)默认参数
# 可写函数说明
def printinfo(name, age=35):
"打印任何传入的字符串"
print("名字: ", name)
print("年龄: ", age)
return
# 调用printinfo函数
printinfo(age=50, name="runoob")
print("------------------------")
printinfo(name="runoob") #使用默认参数
(4)不定长参数
你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述 2 种参数不同,声明时不会命名。基本语法如下:
def functionname([formal_args,] *var_args_tuple ):
"函数_文档字符串"
function_suite
return [expression]
代码举例:
# 可写函数说明
def printinfo(arg1, **vardict):
"打印任何传入的参数"
print("输出: ")
print(arg1)
print(vardict)
# 调用printinfo 函数
printinfo(1, a=2, b=3)
输出:
输出:
1
{'a': 2, 'b': 3}
声明函数时,参数中星号 * 可以单独出现。如果单独出现星号 * 后的参数必须用关键字传入。
6.3 匿名函数
python 使用 lambda 来创建匿名函数。所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。
- lambda 只是一个表达式,函数体比 def 简单很多。
- lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
- lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
- 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
lambda函数只包含一个语句,如下:
lambda [arg1 [,arg2,.....argn]]:expression
实现两个参数相加的代码举例如下:
# 可写函数说明
sum = lambda arg1, arg2: arg1 + arg2
# 调用sum函数
print("相加后的值为 : ", sum(10, 20))
6.4 return语句
# 可写函数说明
def sum(arg1, arg2):
# 返回2个参数的和."
total = arg1 + arg2
print("函数内 : ", total)
return total
# 调用sum函数
total = sum(10, 20)
print("函数外 : ", total)
6.5 全局变量和局部变量
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。
参考:https://www.runoob.com/