- 摘要:函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这叫做用户自定义函数。
一、函数的使用步骤
(一)定义一个函数
- 函数代码块以def关键词开头,后接函数标识符名和圆括号()。
- 任何传入参数和自变量必须放在括号中间。圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串以用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
- return[表达式]结束函数,选择性地返回一个值给调用方。不带表达式地return相当于返回None
def 函数名(参数):
“函数文档字符串”
代码1
代码2
.....
#自定义一个函数
def demo1():
print("这是demo1函数")
#函数如果不调用,他不会执行
(二)函数的调用
- 定义一个函数只给了函数一个名称,指定了函数里面包含地参数,和代码块结构。
- 函数必须调用才会进行执行
- 不同的需求,参数可有可无。
- 在Python中,函数必须先定义后使用。
# 定义函数
def demo():
print("我是demo函数")
# 调用函数
demo()
--------------------------
我是demo函数
二、函数的参数作用
(一)必备参数
- 必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。调用demo()函数,你必须传入一个参数,不然会出现语法错误。
- 完成需求:一个函数完成两个数1和2的加法运算,如何书写程序?
def demo1(a,b):
c = (a + b)
print(c)
demo1(10,20)
-----------------------
30
# 程序入口
if __name__ == '__main__'
# 一个程序的从这开始运行
# 在这里可以添加任何调用指令
demo()
(二)关键字参数
- 关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
def demo1(name="张三",age=18):
print(f"大家好,我是{name},今年{age}岁了")
demo1()
# 第二种方法
def demo1(name="张三",age=18):
print(f"大家好,我是{name},今年{age}岁了")
if __name__ == '__main__':
name="李四"
age=20
demo1(name,age)
-------------------------
大家好,我是张三,今年18岁了
大家好,我是李四,今年20岁了
(三)默认参数
- 调用函数时,默认参数的值如果没有传入,则被认为是默认值。如果age没有被传入,下例会打印默认的age。
def demo1(name="张三",age=18):
print(f"大家好,我是{name},今年{age}岁了")
demo1()
demo1(name="李四",age=20)
--------------------------------
大家好,我是张三,今年18岁了
大家好,我是李四,今年20岁了
(四)不定长参数
- python自定义函数中有两种不定长参数,第一种是*XXX,在传入额外的参数时可以不用指明参数名,直接传入参数值即可。第二种是**XXX,这是类型返回的是字典,传入时需要指定参数名。
# 第一种
def demo2(*args):
print(args)
# 第二种
def demo3(**kwargs):
print("我的学员信息是",kwargs)
if __name__ == '__main__':
demo2(1, 3, 5, 6, 98, 52, 6, 5)
demo3(name="张三",age=20,heigth=187.5)
-------------------------------------------------
(1, 3, 5, 6, 98, 52, 6, 5)
我的学员信息是 {'name': '张三', 'age': 20, 'heigth': 187.5}
- 加了一个星号*不定长参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。加了两个星号的参数会以字典的形式导入,存放已命名的变量参数。
def demo4(num,*args,**kwargs):
print(num)
print(args)
print(kwargs)
if __name__ == '__main__':
demo4("张三", "李四", "王五", name="赵六", age="20")
-------------------------------------
张三
('李四', '王五')
{'name': '赵六', 'age': '20'}
三、函数的返回值作用
def demo1():
for i in range(1,10):
return i
print(demo1())
def demo2():
list = []
for i in range(1,10):
list.append(i)
return list
if __name__ == '__main__':
print(demo2())
---------------------------------
1
[1, 2, 3, 4, 5, 6, 7, 8, 9]
四、变量作用域
- 一个程序的所有的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的。
- 变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称。
- 全局变量
num = 10 #全局变量
def demo():
result = num+20
print(result)
demo()
-------------------------
30
def demo2():
global num # 声明num为全局变量
num = 10 # 局部变量
demo2()
result = num +10
print(result)
------------------------
20
五、函数的嵌套使用
- 所谓函数嵌套调用指的是一个函数里面又调用了另外一个函数
def demo1():
print("我是demo1函数")
def demo2():
print("demo2函数开始执行")
demo1()
print("demo2函数结束执行")
if __name__ == '__main__':
demo2()
----------------------------
demo2函数开始执行
我是demo1函数
demo2函数结束执行