定义函数
函数代码块以def开头,后接函数标识符名称和();
任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。
def 函数名(参数列表):
函数体
def area(width,height):
return width*height
w=float(input("宽:"))
h=float(input("高:"))
print("宽 ",w,"高 ",h,"面积 ",area(w,h))
return
return [表达式] 结束函数,选择性地返回一个值给调用方。
不带return相当于返回 None。
函数中,一旦执行return,函数执行过程立即终止。
def sum1(arg1,arg2):
total=arg1+arg2
print ("函数内 : ",total)
return total
def sum2(arg1,arg2):
total=arg1+arg2
print ("函数内 : ",total)
print ("函数外 : ",sum1(10,20))
print ("函数外 : ",sum2(10,20))
函数调用
python中必须先定义再调用
参数
1、普通参数
严格按照顺序,将实际参数赋值给形式参数。
def printinfo( name, age ):
print ("名字: ", name)
print ("年龄: ", age)
return
printinfo("ss",40)
2、默认参数
调用函数时,如果没有传递参数,则会使用默认参数。
默认参数必须放在参数列表最后。
def printinfo(name,age=35):
print ("名字: ",name)
print ("年龄: ",age)
return
printinfo("ss")
3、指定参数
将实际参数赋值给形式参数
def printinfo( name, age ):
print ("名字: ", name)
print ("年龄: ", age)
return
printinfo( age=50, name="ss" )
4、动态参数
形式参数加*,多个实际参数作为一个元组传入函数。
def printinfo( *name ):
print ("名字: ",name)
printinfo( "aa","bb", 60, 50 )
l=[11,22,"cc"]
printinfo(l) #列表作为元组的单一元素
printinfo(*l) #列表中每一个元素作为元组的一个元素
形式参数加**,多个实际参数作为一个字典传入函数。
函数调用时必须用指定参数形式,同时存在key和value
def printinfo( **name ):
print (name)
printinfo( name1="aa",name2="bb",name3=11 )
d={"n1":"cc","n2":"dd"}
printinfo(**d)
两种方式共用,*在前,**在后。
def printinfo( *name1,**name2 ):
print (name1)
print (name2)
printinfo( "ss","cc",n1="aa",n2="bb",n3=11 )
参数传入函数的是引用,函数中改变的是参数原值
def f1(a):
a.append(999)
l=[11,22,33]
f1(l)
print(l
变量作用域
变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。
全局变量:定义在函数外的,可以在整个程序范围内访问。
局部变量:定义在函数内部的,只能在其被声明的函数内部访问。
调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。
全局变量和局部变量名相同时,优先用局部变量。
total=0 #全局变量
def sum(arg1,arg2):
total=arg1+arg2 #局部变量
print("函数内局部变量:",total)
return total
sum(10,20)
print("函数外全局变量:",total)
函数中对全局变量重新赋值用"global 变量名"的方式。
NAME="global_ss" #全局变量用大写
def f1():
age=18
global NAME
NAME =123
print(NAME,age)
def f2():
age=19
print(NAME,age)
f1()
f2()
lambda表达式
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
lambda 函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
def f1(arg)
return arg+100
f2=lambda arg: arg+100 #冒号前是参数,冒号后是表达式,自动return表达式的结果。
f3=lambda a1,a2: a1+a2
print(f3(2,4))