python函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。
之前所学的很多函数方法都是前人已经定义好,供我们来使用的函数,而根据使用者的不同需求,我们可以自己定义我们所需要的函数。
你可以定义一个由自己想要功能的函数,以下是简单的规则:
1)函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
2)任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
3)函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
4)函数内容以冒号起始,并且缩进。
5)return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
实例如下:
def printme(str):
"打印传入的字符串到标准显示设备上"
print(str)
return ' '
实例如下:
# 定义函数
def printme( str ):
"打印任何传入的字符串"
print (str)
return ' '
# 调用函数
printme("我要调用用户自定义函数!")
printme("再次调用同一函数")
输出如下:
我要调用用户自定义函数!
再次调用同一函数
在讲参数传递之前,先导入一个概念,数据类型只对数据而言,而变量不是数据,因此变量没有数据类型。
举个例子,a = 2,那么2是属于int类型,但不能说a也属于int类型。
可以换一种理解方式去理解变量,变量代表着一条路径,当你使用变量时,就可以通过变量这一条路径来找到对应的数据,当然也可以由多个变量指向同一个数据,但不能一个变量指向多个数据。
实例如下:
def ChangeInt( a ):
a = 10
b = 2
ChangeInt(b)
print (b) # 结果是 2
就如同上面这个实例,在传入变量b时,实际上传入的是通过b这个路径所找到的数据——2,因此路径b所指向的数据并没有通过函数而改变,所以当你打印b时,它所找到的数据仍旧是2。
实例如下:
def printme( str ):
"打印任何传入的字符串"
print (str)
return
#调用printme函数
printme()
输出如下:
Traceback (most recent call last):
File "test.py", line 11, in
printme()
TypeError: printme() takes exactly 1 argument (0 given)
如果在定义函数时设置的是必备参数,那么在调用函数时传入了小于必备参数数量的参数,那么python会报错。
实例如下:
#可写函数说明
def printme( str ):
"打印任何传入的字符串"
print (str)
return
#调用printme函数
printme( str = "My string")
输入如下:
My string
可以用上述方式使用关键字传参,一般在有多个参数时,python会将你传入的实例参数一一对应到形参中,但如果你使用了关键字传参的方式,则任意顺序输入你想要传入的参数。
实例如下:
def printinfo( name, age = 35 ):
"打印任何传入的字符串"
print ("Name: ", name)
print ("Age ", age)
return ' '
#调用printinfo函数
printinfo( age=50, name="miki" )
printinfo( name="miki" )
输出如下:
Name: miki
Age 50
Name: miki
Age 35
当你在设置形参时就用=号的形式为形参赋值时,在该形参没有接收到实例参数的时候,python会直接默认你在先前设置形参时传入的值为该形参的值,而不会引发错误。
有时你可能会需要函数接受多个参数,但你在定义函数时暂时不知道具体会传入多少个参数的时候,可以使用不定长参数来设置形参。
实例如下:
def printinfo( arg1, *vartuple ):
"打印任何传入的参数"
print ("输出: ")
print (arg1)
for var in vartuple:
print (var)
return ' '
# 调用printinfo 函数
printinfo( 10 )
printinfo( 70, 60, 50 )
输入如下:
输出:
10
输出:
70
60
50
在需要设置成不定长参数时,在该形参前面加一个*号,表明这是一个不定长参数,这个参数会保存你实例参数中输入的所有参数,在函数中要使用时,可以通过遍历的方式取得,类似于列表。