函数是变成语言中最常见的语法,函数的本质就是功能的封装。使用函数可以大大提高编程效率与程序的可读性。函数是能够实现特定功能的计算机代码而已,他是一种特定的代码组结构。
函数的作用
基本
def 函数名称( ):
? ? ? ? # 函数体
带有参数
def 函数名称(参数[,参数2,参数3]):
? ? ? ? # 代码块
带有返回值
def 函数名称():
? ? ? ? # 代码块
? ? ? ? return values
def funName(args):
print(args)
return args
函数名的命名规则:和变量基本一样
注意函数定义之后不会自动执行,必须在调用函数后函数才会执行,并且函数必须定义在前,只有前边定义了函数后面才能调用
# 函数定义
def funName(args):
print(args)
return args
# 函数调用:注意函数必须定义在前,只有前边定义了函数后面才能调用
funName("xujingliang")
必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
def getAll(a,b,c,d):
return a+b+c+d
print(getAll(1,2,3,4))
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
def getUserInfo(name,age):
print(name,age)
getUserInfo("xujingliang",20)
getUserInfo(age=20,name="sunyanan")
调用函数时,默认参数的值如果没有传入,则被认为是默认值。下例会打印默认的age,如果age没有被传入:?
def getPassword(username,password="12345"):
print(username,password)
getPassword("xujingliang")
getPassword("sunyanan","54321")
不定长参数:你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名。基本语法如下:
def printUsers(user,*users):
print(user)
print(users)
printUsers("xujingliang")
printUsers("xujingliang","xunyanan","wuyou","wutong")
def getAllSum(arg,*args):
res = arg
if len(args)>0:
for i in args:
res += i
return res
print("return语句返回结果",getAllSum(10,20,30,40))
使用 lambda 来创建匿名函数。
语法:?lambda [arg1 [,arg2,.....argn]]:expression
userinfo = lambda username,password:print(username+":"+password)
userinfo("xujingliang","123456789")
return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。之前的例子都没有示范如何返回数值,下例便告诉你怎么做:
def getResult(arg,*args):
res = arg
if len(args)>0:
for i in args:
res += i
return res
print("return语句返回结果",getResult(10,20,30,40))
上述代码示例中,计算所有传入参数的值,并返回所有值的总和结果。?
?一个程序的所有的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的。变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称。两种最基本的变量作用域如下:
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。如下实例:
total = 10
def getSum(a,b):
total = a+b
print("这里的total为局部变量",total)
return total
getSum(10,10)
print("这里的total为全局变量与函数内的total互不影响",total)
可以通过global关键字来在函数内部创建全局变量
def createGlobalVar(globalArgs):
global globalArg
globalArg = globalArgs
createGlobalVar(200)
print(globalArg)
如果全局变量和局部变量重名,可以使用全局函数globals()在函数内部访问重名的全局变量?
def accessGlobalVar():
total = 10086
print(total)
print(globals()['total'])
accessGlobalVar()