函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
- 定义函数的格式如下:
demo:def 函数名(): 代码
# 定义一个函数,能够完成打印信息的功能 def printInfo(): print('------------------------------------') print (' 人生苦短,我用Python') print('------------------------------------')
- 定义了函数之后,就相当于有了一个具有某些功能的代码,想要让这些代码能够执行,需要调用它
调用函数很简单的,通过 函数名() 即可完成调用
demo:
# 定义完函数后,函数是不会自动执行的,需要调用它才可以
printInfo()
-
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
- 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
-
>>> def test(a,b): ... "用来完成对2个数求和" ... print("%d"%(a+b)) ... >>> >>> test(11,22) 33
如果执行,以下代码
```pythonhelp(test)
能够看到test函数的相关说明
Help on function test in module main:
test(a, b)
用来完成对2个数求和
(END)
5. ####函数参数
>以下是调用函数时可使用的正式参数类型:
- 必需参数(位置参数)
- 关键字参数
- 默认参数
- 不定长参数
---
- ####必需参数(位置参数)
必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
调用printme()函数,你必须传入一个参数,不然会出现语法错误:
demo:
```python
#!/usr/bin/python3
#可写函数说明
def printme( str ):
"打印任何传入的字符串"
print (str)
return
调用printme函数
printme()
以上实例输出结果:
Traceback (most recent call last): File "test.py", line 10, in <module> printme() TypeError: printme() missing 1 required positional argument: 'str'
调用的时候带入参数就不会出现上面的错误了.!
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
以下实例在函数 printme() 调用时使用参数名:
#!/usr/bin/python3
#可写函数说明
def printme( str ):
"打印任何传入的字符串"
print (str)
return
#调用printme函数
printme(str="叩丁狼教育")
以上实例输出结果:
叩丁狼教育
以下实例中演示了函数参数的使用不需要使用指定顺序:
#可写函数说明
def printinfo( name, age ):
"打印任何传入的字符串"
print ("名字: ", name)
print ("年龄: ", age)
return
#调用printinfo函数
printinfo( age=18, name="wolfcode" )
以上实例输出结果:
名字: wolfcode
年龄: 18
demo:
#可写函数说明
def printinfo( name, age = 22 ):
"打印任何传入的字符串"
print ("名字: ", name)
print ("年龄: ", age)
return
#调用printinfo函数
printinfo( age=18, name="wolfcode" )
print ("------------------------")
printinfo( name="wolfcode" )
以上实例输出结果:
名字: wolfcode
年龄: 50
------------------------
名字: wolfcode
年龄: 22
-
你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述 2 种参数不同,声明时不会命名。基本语法如下:
def functionname([formal_args,] *var_args_tuple ): "函数_文档字符串" function_suite return [expression] 加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。
demo:
```python可写函数说明
def printinfo( arg1, *vartuple ):
“打印任何传入的参数”
print (“输出: “)
print (arg1)
print (vartuple)
调用printinfo 函数
printinfo( 70, 60, 50 )
以上实例输出结果:
输出:
70
(60, 50)
---
- ######如果在函数调用时没有指定参数,它就是一个空元组。我们也可以不向函数传递未命名的变量。如下实例:
demo:
```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
-
还有一种就是参数带两个星号 **基本语法如下:
加了两个星号 ** 的参数会以字典的形式导入。def functionname([formal_args,] **var_args_dict ): "函数_文档字符串" function_suite return [expression]
demo:
# 可写函数说明
def printinfo( arg1, **vardict ):
"打印任何传入的参数"
print ("输出: ")
print (arg1)
print (vardict)
# 调用printinfo 函数
printinfo(1, a=2,b=3)
以上实例输出结果:
输出:
1
{'a': 2, 'b': 3}
声明函数时,参数中星号 * 可以单独出现,例如:
def f(a,b,*,c):
return a+b+c
如果单独出现星号 * 后的参数必须用关键字传入。
>>> def f(a,b,*,c):
... return a+b+c
...
>>> f(1,2,3) # 报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: f() takes 2 positional arguments but 3 were given
>>> f(1,2,c=3) # 正常
6
>>>
定义时小括号中的参数,用来接收参数用的,称为 “形参”
调用时小括号中的参数,用来传递给函数用的,称为 “实参”