基础语法 Python保留字 1 2 3 >>> import keyword >>> keyword.kwlist ['False' , 'None' , 'True' , 'and' , 'as' , 'assert' , 'async' , 'await' , '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' ]
多行语句 使用反斜杠\
来实现多行语句
注释
单行注释以 # 开头
多行注释可以用多个 # 号,也可用三个单引号 '‘’ 或者三个双引号 "“” 将注释括起来
缩进 使用缩进来表示代码块,不需要使用大括号 {} ,缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数
数字类型 python中数字有四种类型:整数(int, 1…)、布尔型(bool, True…)、浮点数(float, 1.23…)和复数(complex, 1+2j…)
字符串
单引号 ‘ 和双引号 “ 使用完全相同
使用三引号(‘’’ 或 “”” )可以指定一个多行字符串
转义符 \
反斜杠可以用来转义,使用 r 可以让反斜杠不发生转义。 如 r”this is a line with \n” 则 \n 会显示,并不是换行
按字面意义级联字符串,如 “this “ “is “ “string” 会被自动转换为 this is string
字符串可以用 + 运算符连接在一起,用 ***** 运算符重复
字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始
Python 中的字符串不能改变
Python 没有单独的字符类型,一个字符就是长度为 1 的字符串
字符串的截取的语法格式如下:变量[头下标:尾下标:步长] (步长表示间隔)
print 输出 print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 **end=””**:
1 2 3 4 5 6 7 8 x="a" y="b" print ( x, end=" " )print ( y, end=" " )a b
基本数据类型
变量无需声明,但每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建
在 Python 中,变量就是变量,它没有类型,我们所说的”类型”是变量所指的内存中对象的类型
同时为多个变量赋值:
为多个对象指定多个变量:
1 a, b, c = 1 , 2 , "runoob"
标准数据类型 Python3 的六个标准数据类型中:
不可变数据(3 个): Number(数字)、String(字符串)、Tuple(元组)
可变数据(3 个): List(列表)、Dictionary(字典)、Set(集合)
Number(数字) int、float、bool、complex(复数)
内置的 type()
函数和 isinstance
可以询变量所指的对象类型
注意: Python3 中,bool 是 int 的子类,True 和 False 可以和数字相加, True==1、False==0 会返回 True ,但可以通过is 来判断类型。
1 2 3 4 5 6 7 8 >>> issubclass (bool , int ) True >>> True ==1 True >>> False +1 1 >>> 1 is True False
数值运算 1 2 3 4 5 6 7 8 9 10 11 12 13 14 >>> 5 + 4 9 >>> 4.3 - 2 2.3 >>> 3 * 7 21 >>> 2 / 4 0.5 >>> 2 // 4 0 >>> 17 % 3 2 >>> 2 ** 5 32
在混合计算时,Python会把整型转换成为浮点数
Python 还支持复数,复数由实数部分和虚数部分构成,可以用 **a + bj
**,或者 complex(a,b)
表示, 复数的实部 a
和虚部 b
都是浮点型
//
得到的并不一定是整数类型的数,它与分母分子的数据类型有关系
数字类型转换 只需要将数据类型作为函数名即可
int(x) 将x转换为一个整数
float(x) 将x转换到一个浮点数
complex(x) 将x转换到一个复数,实数部分为 x,虚数部分为 0
complex(x, y) 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y,x 和 y 是数字表达式
数学函数
函数
返回值 ( 描述 )
abs(x)
返回数字的绝对值,如abs(-10) 返回 10
ceil(x)
返回数字的上入整数,如math.ceil(4.1) 返回 5
cmp(x, y)
如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。 Python 3 已废弃,使用 (x>y)-(x<y) 替换 。
exp(x)
返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045
fabs(x)
以浮点数形式返回数字的绝对值,如math.fabs(-10) 返回10.0
floor(x)
返回数字的下舍整数,如math.floor(4.9)返回 4
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,…)
返回给定参数的最小值,参数可以为序列
modf(x)
返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。
pow(x, y)
x**y 运算后的值
round(x,[,n])
返回浮点数 x 的四舍五入值,如给出 n 值,则代表舍入到小数点后的位数。**其实准确的说是保留值将保留到离上一位更近的一端
sqrt(x)
返回数字x的平方根
随机数函数
三角函数
数字常量
常量
描述
pi
数学常量 pi(圆周率,一般以π来表示)
e
数学常量 e,e即自然常数(自然常数)
String(字符串)
字符串用单引号 ‘ 或双引号 “ 括起来,同时使用反斜杠 \
转义特殊字符
使用反斜杠 \
转义特殊字符,如果你不想让反斜杠发生转义,可以在字符串前面添加一个 r ,表示原始字符串1 2 >>> print (r'Ru\noob' )Ru\noob
自带空格连接1 2 3 4 5 >>> word = 'Python' >>> print (word[0 ], word[5 ])P n >>> print (word[-1 ], word[-6 ])n P
Python 字符串不能被改变。向一个索引位置赋值,比如 word[0] = 'm'
会导致错误\
用+运算符连接在一起,用*运算符重复
两种索引方式,从左往右以0开始,从右往左以-1开始
字符串的截取的语法格式如下:
字符串更新 通过截取字符串的一部分并与其他字段拼接:
1 2 var1 = 'Hello World!' print ("已更新字符串 : " , var1[:6 ] + 'Runoob!' )
转义符
转义字符
描述
\ (在行尾时)
续行符
\
反斜杠
\‘
单引号
\“
双引号
\a
响铃
\b
退格
\000
空
\n
换行
\v
纵向制表符
\t
横向制表符
\r
回车,将 \r 后面的内容移到字符串开头,并逐一替换开头部分的字符,直至将 \r 后面的内容完全替换完成
\f
换页
\yyy
八进制数,y 代表 0~7 的字符,例如:\012 代表换行
\xyy
十六进制数,以 \x 开头,y 代表的字符,例如:\x0a 代表换行
字符串运算符 下表实例变量 a 值为字符串 “Hello”,b 变量值为 “Python”:
操作符
描述
实例
+
字符串连接
a + b 输出结果: HelloPython
*
重复输出字符串
a*2 输出结果:HelloHello
[]
通过索引获取字符串中字符
a[1] 输出结果 e
[ : ]
截取字符串中的一部分,遵循左闭右开 原则,str[0:2] 是不包含第 3 个字符的。
a[1:4] 输出结果 ell
in
成员运算符 - 如果字符串中包含给定的字符返回 True
‘H’ in a 输出结果 True
not in
成员运算符 - 如果字符串中不包含给定的字符返回 True
‘M’ not in a 输出结果 True
r/R
原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母 r (可以大小写)以外,与普通字符串有着几乎完全相同的语法
print( r'\n' ) print( R'\n' )
字符串格式化 1 print ("我叫 %s 今年 %d 岁!" % ('Leo' , 12 ))
三引号 三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符
bool(布尔类型)
布尔类型即 True 或 False
布尔类型可以和其他数据类型进行比较,比如数字、字符串等。在比较时,Python 会将 True 视为 1,False 视为 0
可以和逻辑运算符一起使用,包括 and、or 和 not,这些运算符可以用来组合多个布尔表达式,生成一个新的布尔值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 a = True b = False print (2 < 3 ) print (2 == 3 ) print (a and b) print (a or b) print (not a) print (int (a)) print (float (b)) print (str (a))
注意: 在 Python 中,所有非零的数字和非空的字符串、列表、元组等数据类型都被视为 True,只有 0、空字符串、空列表、空元组 等被视为 False。因此,在进行布尔类型转换时,需要注意数据类型的真假性。
List(列表)
表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(类似于Java中的泛型)
列表是写在方括号 [] 之间、用逗号分隔开的元素列表
和字符串一样,列表同样可以被索引和截取,截取后返回一个包含所需元素的新列表
与Python字符串不一样的是,列表中的元素是可以改变的:1 2 3 4 5 6 7 8 >>> a = [1 , 2 , 3 , 4 , 5 , 6 ]>>> a[0 ] = 9 >>> a[2 :5 ] = [13 , 14 , 15 ]>>> a[9 , 2 , 13 , 14 , 15 , 6 ] >>> a[2 :5 ] = [] >>> a[9 , 2 , 6 ]
Python 列表截取可以接收第三个参数,参数作用是截取的步长,如果第三个参数为负数表示逆向读取
逆转句子的实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 def reverseWords (input ): inputWords = input .split(" " ) inputWords=inputWords[-1 ::-1 ] output = ' ' .join(inputWords) return output if __name__ == "__main__" : input = 'I like runoob' rw = reverseWords(input ) print (rw)
更新列表 直接进行修改或更新:
1 2 3 4 5 list = ['Google' , 'Runoob' , 1997 , 2000 ] print ("第三个元素为 : " , list [2 ])list [2 ] = 2001 print ("更新后的第三个元素为 : " , list [2 ])
使用 append() 方法:
1 2 3 list1 = ['Google' , 'Runoob' , 'Taobao' ] list1.append('Baidu' ) print ("更新后的列表 : " , list1)
删除列表元素 使用 del 语句来删除列表的的元素,如下实例:
1 2 list = ['Google' , 'Runoob' , 1997 , 2000 ]del list [2 ]
拼接 1 2 3 4 squares = [1 , 4 , 9 , 16 , 25 ] squares += [36 , 49 , 64 , 81 , 100 ]
与列表有关的函数和方法 1 len(list) max(list) min(list) list(seq )
1 2 3 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()
Tuple(元组)
与列表类似,不同之处在于元组的元素不能修改 (可以把字符串看作一种特殊的元组)
元组写在小括号 () 里,元素之间用逗号 隔开
元组中的元素类型也可以不相同
虽然tuple的元素不可改变,但它可以包含可变的对象,比如list列表\
构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则:
访问元组 使用下标索引:
1 2 tup1 = ('Google' , 'Runoob' , 1997 , 2000 ) print ("tup1[0]: " , tup1[0 ])
修改元组 元组中的元素值是不允许修改的,但我们可以对元组进行连接组合:
1 2 3 4 5 6 tup1 = (12 , 34.56 ) tup2 = ('abc' , 'xyz' ) tup3 = tup1 + tup2
删除元组 元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组:
1 2 tup = ('Google' , 'Runoob' , 1997 , 2000 ) del tup
元组运算符
元组索引,截取 同列表
元组内置函数
序号
方法及描述
实例
1
len(tuple)
计算元组元素个数
>>> tuple1 = ('Google', 'Runoob', 'Taobao') >>> len(tuple1) 3
2
max(tuple)
返回元组中元素最大值
>>> tuple2 = ('5', '4', '8') >>> max(tuple2) '8'
3
min(tuple)
返回元组中元素最小值
>>> tuple2 = ('5', '4', '8') >>> min(tuple2) '4' >>>
4
tuple(iterable)
将可迭代系列转换为元组
>>> list1= ['Google', 'Taobao', 'Runoob', 'Baidu'] >>> tuple1=tuple(list1) >>> tuple1 ('Google', 'Taobao', 'Runoob', 'Baidu')
Set(集合)
一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员
基本功能是进行成员关系测试和删除重复元素
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 **{ }**,因为 { } 是用来创建一个空字典
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 sites = {'Google' , 'Taobao' , 'Runoob' , 'Facebook' , 'Zhihu' , 'Baidu' } print (sites) if 'Runoob' in sites : print ('Runoob 在集合中' ) else : print ('Runoob 不在集合中' ) a = set ('abracadabra' ) b = set ('alacazam' ) print (a)print (a - b) print (a | b) print (a & b) print (a ^ b)
添加元素 1 2 s.add( x ) s.update( x )
移除元素 1 2 3 s.remove( x ) s.discard( x ) s.pop()
计算集合元素个数
清空集合
判断元素是否在集合中存在
集合内置方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 add() clear() copy() difference() difference_update() discard() intersection() intersection_update() isdisjoint() issubset() issuperset() pop() remove() symmetric_difference() symmetric_difference_update() union() update()
Dictionary(字典)
列表是有序的对象集合,字典是无序的对象集合,两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取
字典是一种映射类型,字典用 { } 标识,它是一个无序的 键(key) : 值(value) 的集合
字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(, )分割,整个字典包括在花括号 {} 中
键(key)必须使用不可变类型
访问字典里的值 把相应的键放入到方括号中:
1 2 3 4 tinydict = {'Name' : 'Runoob' , 'Age' : 7 , 'Class' : 'First' } print ("tinydict['Name']: " , tinydict['Name' ])print ("tinydict['Age']: " , tinydict['Age' ])
修改字典 增加新的键/值对,修改或删除已有键/值对:
1 2 3 4 tinydict = {'Name' : 'Runoob' , 'Age' : 7 , 'Class' : 'First' } tinydict['Age' ] = 8 tinydict['School' ] = "菜鸟教程"
删除字典元素 1 2 3 4 5 tinydict = {'Name' : 'Runoob' , 'Age' : 7 , 'Class' : 'First' } del tinydict['Name' ] tinydict.clear() del tinydict
字典键特性
不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住
键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行
字典内置函数和方法 1 2 3 len (dict ) str (dict ) type (variable)
1 2 3 4 5 6 7 8 9 10 11 12 dict .clear() dict .copy() dict .fromkeys() dict .get(key, default=None ) key in dict dict .items() dict .keys() dict .setdefault(key, default=None ) dict .update(dict2) dict .values() pop(key[,default]) popitem()
数据类型转换 隐式类型转换
自动将一种数据类型转换为另一种数据类型
较低数据类型(整数)就会转换为较高数据类型(浮点数)以避免数据丢失
某些情况(例如字符串与整数相加)无法隐式转换
显式类型转换 使用 int()、float()、str() 等预定义函数来执行显式类型转换
1 2 3 y = int (2.8 ) w = float ("4.2" ) z = str (3.0 )
以下几个内置的函数可以执行数据类型之间的转换,这些函数返回一个新的对象,表示转换的值:
运算符 算术运算符
比较运算符
赋值运算符 1 =, +=, -=, *=, /=, %=, **=, //=, :=
(:=
是海象运算符,可在表达式内部为变量赋值)
位运算符
逻辑运算符 假设a为10, b为20
运算符
逻辑表达式
描述
实例
and
x and y
布尔”与” - 如果 x 为 False,x and y 返回 x 的值,否则返回 y 的计算值
(a and b) 返回 20
or
x or y
布尔”或” - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值
(a or b) 返回 10
not
not x
布尔”非” - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True
not(a and b) 返回 False
成员运算符 1 2 3 4 5 6 7 8 9 a = 10 list = [1 , 2 , 3 , 4 , 5 ] if ( a in list ): print ("变量 a 在给定的列表中 list 中" ) else : print ("变量 a 不在给定的列表中 list 中" )
指示指定序列中是否包含元素
身份运算符
运算符
描述
实例
is
is 是判断两个标识符是不是引用自一个对象
x is y , 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False
is not
is not 是判断两个标识符是不是引用自不同对象
x is not y , 类似 **id(x) != id(y)**,如果引用的不是同一个对象则返回结果 True,否则返回 False
注: id() 函数用于获取对象内存地址
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 a = 20 b = 20 if ( a is b ): print ("1 - a 和 b 有相同的标识" ) else : print ("1 - a 和 b 没有相同的标识" ) if ( id (a) == id (b) ): print ("2 - a 和 b 有相同的标识" ) else : print ("2 - a 和 b 没有相同的标识" )
条件控制 if语句 1 2 3 4 5 6 if condition_1: statement_block_1 elif condition_2: statement_block_2 else : statement_block_3
注:
elif 代替了 else if ,所以if语句的关键字为:if – elif – else
每个条件后面要使用冒号 **:**,表示接下来是满足条件后要执行的语句块
使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块
match…case match 后的对象会依次与 case 后的内容进行匹配,如果匹配成功,则执行匹配到的表达式,否则直接跳过,**_** 可以匹配一切:
1 2 3 4 5 6 7 8 9 match subject: case <pattern_1>: <action_1> case <pattern_2>: <action_2> case <pattern_3>: <action_3> case _: <action_wildcard>
实例:
1 2 3 4 5 6 7 8 9 10 def http_error (status ): match status: case 400 : return "Bad request" case 404 : return "Not found" case 418 : return "I'm a teapot" case _: return "Something's wrong with the internet"
一个 case 也可以设置多个匹配条件,条件使用 | 隔开
循环语句 while循环 一般格式为:
1 2 while 判断条件(condition): 执行语句(statements)……
注:
同样需要注意冒号和缩进
Python 中没有 do..while 循环
while 循环使用 else 语句 如果while 后面的条件语句为 false 时,则执行 else 的语句块:
1 2 3 4 while <expr>: <statement(s)> else : <additional_statement(s)>
for语句 Python for 循环可以遍历任何可迭代对象,如一个列表或者一个字符串:
1 2 3 4 for <variable> in <sequence>: <statements> else : <statements>
实例如下:
1 2 3 4 5 6 7 sites = ["Baidu" , "Google" ,"Runoob" ,"Taobao" ] for site in sites: print (site) word = 'runoob' for letter in word: print (letter)
for…else 当循环执行完毕(即遍历完 iterable 中的所有元素)后,会执行 else 子句中的代码,如果在循环过程中遇到了 break 语句,则会中断循环,此时不会执行 else 子句:
1 2 3 4 for item in iterable: else :
range() 函数 会返回指定区间的值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 >>>for i in range (5 ): print (i) 0 1 2 3 4 >>>for i in range (5 ,9 ) : print (i) 5 6 7 8 >>>for i in range (0 , 10 , 3 ) : print (i) 0 3 6 9
pass 语句 Python pass是空语句,是为了保持程序结构的完整性
pass 不做任何事情,一般用做占位语句:
1 2 3 4 5 for letter in 'Runoob' : if letter == 'o' : pass print ('执行 pass 块' ) print ('当前字母 :' , letter)
Python推导式 列表推导式 1 2 3 4 5 [表达式 for 变量 in 列表] [out_exp_res for out_exp in input_list] 或者 [表达式 for 变量 in 列表 if 条件] [out_exp_res for out_exp in input_list if condition]
过滤掉长度小于或等于3的字符串列表,并将剩下的转换成大写字母:
1 2 3 4 names = ['Bob' ,'Tom' ,'alice' ,'Jerry' ,'Wendy' ,'Smith' ] new_names = [name.upper() for name in names if len (name)>3 ] print (new_names)['ALICE' , 'JERRY' , 'WENDY' , 'SMITH' ]
字典推导式 1 2 3 { key_expr: value_expr for value in collection } 或 { key_expr: value_expr for value in collection if condition }
1 2 3 4 listdemo = ['Google' ,'Runoob' , 'Taobao' ] newdict = {key:len (key) for key in listdemo}
集合推导式 1 2 3 { expression for item in Sequence } 或 { expression for item in Sequence if conditional }
1 2 a = {x for x in 'abracadabra' if x not in 'abc' }
元组推导式(生成器表达式) 元组推导式可以利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的元组:
1 2 3 (expression for item in Sequence ) 或 (expression for item in Sequence if conditional )
元组推导式返回的结果是一个生成器对象:
1 2 3 4 5 6 >>> a = (x for x in range (1 ,10 ))>>> a<generator object <genexpr> at 0x7faf6ee20a50 > >>> tuple (a) (1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 )
迭代器和生成器 迭代器 迭代是Python访问集合元素的一种方式
1 2 3 4 5 6 7 8 9 10 list =[1 ,2 ,3 ,4 ]it = iter (list ) print (next (it)) print (next (it))for x in it: print (x, end=" " )
1 2 3 4 5 6 7 8 9 10 11 import sys list =[1 ,2 ,3 ,4 ]it = iter (list ) while True : try : print (next (it)) except StopIteration: sys.exit()
生成器
在 Python 中,使用了 yield 的函数被称为生成器(generator)
当在生成器函数中使用 yield 语句时,函数的执行将会暂停,并将 yield 后面的表达式作为当前迭代的值返回
然后,每次调用生成器的 next() 方法或使用 for 循环进行迭代时,函数会从上次暂停的地方继续执行,直到再次遇到 yield 语句。这样,生成器函数可以逐步产生值,而不需要一次性计算并返回所有结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 def countdown (n ): while n > 0 : yield n n -= 1 generator = countdown(5 ) print (next (generator)) print (next (generator)) print (next (generator)) for value in generator: print (value)
使用 yield 实现斐波那契数列:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 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 ) while True : try : print (next (f), end=" " ) except StopIteration: sys.exit()
函数 定义函数
函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()
任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明
函数内容以冒号 : 起始,并且缩进
return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 def area (width, height ): return width * height def print_welcome (name ): print ("Welcome" , name) print_welcome("Runoob" ) w = 4 h = 5 print ("width =" , w, " height =" , h, " area =" , area(w, h))''' Welcome Runoob width = 4 height = 5 area = 20 '''
参数 关键字参数 使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值,例如
1 2 3 4 5 6 7 8 9 10 11 def printinfo ( name, age ): "打印任何传入的字符串" print ("名字: " , name) print ("年龄: " , age) return printinfo( age=50 , name="runoob" )
默认参数 调用函数时,如果没有传递参数,则会使用默认参数
1 2 3 4 5 6 7 8 9 10 11 12 13 def printinfo ( name, age = 35 ): "打印任何传入的字符串" print ("名字: " , name) print ("年龄: " , age) return printinfo( age=50 , name="runoob" ) print ("------------------------" )printinfo( name="runoob" )
不定长参数 1 2 3 4 def functionname ([formal_args,] *var_args_tuple ): "函数_文档字符串" function_suite return [expression]
加了星号 ***** 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 def printinfo ( arg1, *vartuple ): "打印任何传入的参数" print ("输出: " ) print (arg1) print (vartuple) printinfo( 70 , 60 , 50 ) ''' 输出: 70 (60, 50) '''
还有一种就是参数带两个星号 ******基本语法如下:
1 2 3 4 def functionname ([formal_args,] **var_args_dict ): "函数_文档字符串" function_suite return [expression]
加了两个星号 ****** 的参数会以字典的形式导入:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 def printinfo ( arg1, **vardict ): "打印任何传入的参数" print ("输出: " ) print (arg1) print (vardict) printinfo(1 , a=2 ,b=3 ) ''' 输出: 1 {'a': 2, 'b': 3} '''
匿名函数 Python 使用 lambda 来创建匿名函数
所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数
1 lambda [arg1 [,arg2,.....argn]]:expression
例如:
1 2 3 4 5 6 7 8 sum = lambda arg1, arg2: arg1 + arg2 print ("相加后的值为 : " , sum ( 10 , 20 ))print ("相加后的值为 : " , sum ( 20 , 20 ))
将匿名函数封装在一个函数内,这样可以使用同样的代码来创建多个匿名函数
1 2 3 4 5 6 7 8 def myfunc (n ): return lambda a : a * n mydoubler = myfunc(2 ) mytripler = myfunc(3 ) print (mydoubler(11 )) print (mytripler(11 ))
数据结构