## 函数作用和定义
就是把曾经写过的功能独立的代码,打包封装,然后直接调用。
def 函数名():
函数封装的代码
......
函数名一定要符合标识符命名规则。尽量使用小驼峰命名法(首个单词首字母小写,其他首字母大写)
函数名和变量名千万不能用一样的名字。否则会冲突。
注意:定义好函数之后,只表示这个函数封装了一段代码而已,不能主动执行。需要进行调用才可以执行。
### 调用
在python中调用函数只需要:函数名()就可以进行调用。
在其他项目或者文件夹中调用之前定义过的函数,需要用import来调用。
## 函数注释
函数的注释不要写在函数的上方,要写在函数的下面。
根据PEP8书写规范,函数与上方的任何代码应保持两个空行。
def xxx():
"""xxx"""
pass
""""""加上个回车直接就弹出详细的注释名称,然后进行注释就行。
###拓展
用import time来导入工具包
time.sleep()可以使后续的函数或者程序休眠。
## 函数的参数
### 形参和实参
def xxx():括号里面的参数叫做形参。
调用的xxx()这个括号里面的参数就叫做实参。
## 函数的返回值 return
1、在一个函数里return下面的代码不会执行,所以不要写。
2、哪里调用的就把这个值返回到哪里。
3、返回的是值不是变量。在外部无法使用到,除非再用变量定义这个值。
有返回值的函数,比如input一定要用一个变量来接它,否则函数无法输出结果。没有返回值的函数,比如print不能用变量来接。
def sum_2_num(num1, num2):
result = num1 + num2
return result
sum_result = sum_2_num(10, 20)
print("输出结果为:%d" % sum_result)
## 函数的嵌套调用
在一个函数内部调用另一个已经定义好的函数。
def test1():
print("")
def test2():
test1()
test2()
## 位置参数
位置参数顺序很重要,名字对应的就是名字、种类对应的就是种类,否则结果会很搞笑。
### 拓展
如果需要多次调用函数,只需要再次调用就可以
比如:
def a(x1, x2):
print(a)
a(a1, a2)
a(a3, a4)
## 关键字实参
关键字实参不会使位置混淆,造成笑话。
比如:
def a(x1, x2):
print(a)
a(x1 = a1, x2 = a2)
## 默认值
在函数中,我们直接给形参定一个默认值,这样除非实参在定义一个值,否则我们将直接使用给形参定义的这个默认值。这样我们就不用在重新给实参提供值了。
def a(x1=a1, x2=a1):
.
.
.
## 让实参变成可选的
为了让一个函数中的实参变成可选的,可在没有提供实参的情况下,使函数仍然能运行,我们需要给这个实参对应的形参定义一个空字符串'',并把它放在最末尾。
比如:
def a(num1, num2=''):
if num2:
print(num1, num2)
else:
print(num1)
return a
a(1, 2)
这样即使只输入一个实参,也能正确的运行。如果第二个实参也提供了,我们只需要在“a(1,2)”输入即可。
## 函数返回字典,列表
函数不仅能返回值,还能返回字典或者列表等较复杂的数据结构。
## 传递列表
将列表传递给函数,函数就直接能访问其内容。
def greet_users(names):
for name in names:
mag = 'hello'+name.title()+'!'
print(mag)
usernames = ['hannah', 'ty', 'margot']
greet_users(usernames)
### 函数修改列表
把列表传递给函数,函数就可以对这个函数进行修改,这个修改是永久性的,使你高效率的处理大量数据。
在我们写代码的时候,如果发现一个函数执行的任务过多,我们可以给它頭几个函数,保证每个函数只负责一项任务。然后使用函数的嵌套,在一个函数中调用另一个函数,这样更好。
## 传递任意数量的实参
def a(*nums):
print(nums)
a(1,2,3,4,5)
这里面的*代表创建了名为num一个空元组,可以在里面放任意数量的实参。
**代表创建了一个名为num的空字典。
def a(**nums):
print(nums)
a(q='w') |
|