函数
函数是重用的程序段。
自定义函数
def 函数名(参数列表):
函数体
匿名函数 使用 lambda 来创建匿名函数
lambda [arg1,[arg2,...]]:expression
函数的参数
形参:函数括号内的参数
实参:调用函数的时候传递给形参的值
默认参数
#调用函数时,如果没有传递参数,则会使用默认参数。
#给形参指定默认参数,形参=默认值
#例子
def say(message,times = 1):
print(message * times)
say('hello')
say('word',5)
#输出
#hello
#wordwordwordwordword
关键字参数
如果你的某个函数有许多参数,而你只想指定其中的一部分,那么你可以通过命名来为这些参数赋值——这被称作关键参数。
'''
两个优势:1不必担心参数的顺序
2假设其他参数都有默认值,可以给参数赋值来改变默认参数
'''
#例子
def func(a,b=5,c=10):
print('a is',a,'and b is',b,'and c is',c)
func(3,7)
func(25,c=24)
func(c=50,a=100)
#输出
#a is 3 and b is 7 and c is 10
#a is 25 and b is 5 and c is 24
#a is 100 and b is 5 and c is 50
不定长参数 VarArgs参数
'''
定义一个能获取任意个数参数的函数,可以通过*号来实现
'''
#例子
def total(initial=5,*numbers,**keywords):
count=initial
for number in numbers:
count+=number
for key in keywords:
count+=keywords[key]
return count
print(total(10,1,2,3,vegetables=50,fruits=100))
#输出
#166
'''
如何工作:
当我们定义一个带星的参数,像*param时,从那一点后所有的参数被收集为一个叫'param'的列表。(
在该例中,首先会给initial的值由5变成10,然后numbers将1,2,3,收集作为一个元组numbers=(1,2,3))
类似地,当我们定义一个带两个星的参数,像**param时,从那一点开始的所有的关键字参数会被收集为一个
叫做'param'的字典。(在该例中,从vegetables=50后的所有参数收集作为一个字典 keywors='vegetables':50,'fruits:100')
'''
Keyword-only参数
如果想指定特定的关键参数为keyword-only而不是位置参数,可以在带星的参数后申明:
def total(initial=5,*numbers,vegetbales):
count=initial
for number in numbers:
count+=number
count+=vegetbales
return count
print(total(10,1,2,3,vegetables=50))
print(total(10,1,2,3,))
#Raise error because we have not supplied a default argument value for 'vegetables'
#输出
#66
#print(total(10,1,2,3))
#TypeError: total() needs keyword-only argument vegetables
'''
如何工作:
在带星的参数后面申明参数会导致keyword-only参数。如果这些参数没有默认值,并且像上面那样不给关键参数赋值,调用函数的时候就会报错。
如果你想使用keyword-only参数,但又不需要带星的参数,可以简单地使用不是用名字的空星,如def total(initial=5,*,vegetables)
'''
return语句
return 语句用来从一个函数返回即跳出函数。也可以自定义return 返回值。默认 return None
DocStrings文档字符串
def printMax(x,y):
'''Print the maximum of two numbers.
The two values must be integers.'''
x=int(x)
y=int(y)
if x > y:
print(x,'is maximum')
else:
print(y,'is maximum')
printMax(3,5)
print(printMax.__doc__)
#输出
#5 is maximum
#Print the maximum of two numbers.
#
# The two values must be integers.
'''
如何工作:
在函数的第一个逻辑行的字符串是这个函数的文档字符串。注意,DocStrings也适用于模块、类。
文档字符串惯例是一个多行字符串。首行一大写字母开始,以句号结束。第二行是空行,第三行才是详细的描述。
在上面的例子中,可以使用__doc__(注意是双下划线)调用函数的文档字符串属性。在python中函数也可以看做是对象,print(函数的__doc__属性)。
'''
变量作用域
变量在哪个域命名的决定那个域可以访问该变量。
'''
python作用与一共有4中:
L(Local)局部作用域
E(Enclosing)闭包函数外的函数中
G(Global)全局作用域
B(Built-in)内建作用域
以L->E->G->B的规则查找
'''
x = int(2.9)
g_count = 0 #全局作用域
def outer():
o_count = 1 #闭包函数外的函数中
def inner():
i_count = 2 #局部作用域
'''
Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说if/for/while/try这里不会使
用global、nonlocal关键字
'''