Python函数
概念:
函数:函数是指一段可以被另一段程序引用的代码或者程序
函数的定义: 代码块与函数def层级要有4个空格(缩进)
函数定义语法:
def name_list():
print("代码块")
return "success"
result = name_list()
print(result)
默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。
函数调用:
①通过函数名()调用
②通过类实例.函数名()调用
如下实例调用test()函数:
# 定义函数
def test(name):
print(name)
return
# 调用函数
test("Mr.c")
实例输出结果:
Mr.c
函数的参数:
1.在定义函数的时候,函数需要调用者给他的数据就叫参数
2.参数相当于占个坑,告诉你这里得传数据进来
*必须参数
*关键字参数
*默认参数
*不定长参数
- 必须参数:
1.函数调用的时候一定要传的参数,不传就会报错
2.多个参数按顺序传递
3.可以传变量(保证变量已经定义好的),也可以直接传对应的数据
实例1:
# 函数调用的时候一定要传的参数,不传就会报错
def test_01(name,age):
print("我的名字叫{},今年{}岁".format(name,age))
test_01("Mr.c")
实例1输出结果:
TypeError: test_01() missing 1 required positional argument: ‘age’
实例2:
# 多个参数按顺序传递
def test_01(name,age):
print("我的名字叫{},今年{}岁".format(name,age))
test_01(20,"Mr.c")
实例2输出结果:
我的名字叫20,今年Mr.c岁
- 关键字参数:
1.通过关键字传递参数,直接给关键字赋值
2.传递参数不用考虑参数传递的顺序
3.参数传递的时候,关键字名称要和函数定义的一致
实例:
def test_01(age,name):
print("我的名字叫{},今年{}岁".format(name,age))
age = 20
name = 'Mr.c'
test_01(age=age,name=name)
实例输出结果:
我的名字叫Mr.c,今年20岁
- 默认参数:
1.在定义的时候就默认给一个值,函数调用的时候可以不传
2.如果默认参数传递了新的参数进去,就会使用传递进去的新参数
3.在传递默认参数的时候,建议使用关键字参数的传递方式
4.默认参数必须写在必传参数后面,不能放前面,会报错
实例1:
# 在定义的时候就默认给一个值,函数调用的时候可以不传
def test_01(name,age=20):
print("我的名字叫{},今年{}岁".format(name,age))
name = "Mr.c"
test_01(name)
实例1输出结果:
我的名字叫Mr.c,今年20岁
实例2:
# 如果默认参数传递了新的参数进去,就会使用传递进去的新参数
def test_01(name,age=20):
print("我的名字叫{},今年{}岁".format(name,age))
name = "Mr.c"
age = 23
test_01(name,age)
实例2输出结果:
我的名字叫Mr.c,今年23岁
- 不定长参数:
1.函数定义的时候不确定需要传多少个参数,就用不定长参数
2.使用的时候要去掉 * 号
3.定义的时候*号后面的变量名称可以自定义,约定习惯上用 *args,**kwargs
4.不定长参数必须写在必传参数后面,不能放前面,会报错
5.*args,**kwargs 可以同时存在
实例:
def test_01(*args,**kwargs):
# *args:接收多少个参数类型(test1,test2)
# **kwargs:接收多少个参数{key:val,key2:val2}
print("打印不定长参数:args=",args)
for name in args:
print(name)
print("打印不定长参数:kwargs=", kwargs)
test_01("张三","李四","王五",age=10,age2=20,age3=30)
实例输出结果:
打印不定长参数:args= (‘张三’, ‘李四’, ‘王五’)
张三
李四
王五
打印不定长参数:kwargs= {‘age’: 10,‘age2’: 20, ‘age3’: 30}
return语句:
函数的返回值return关键字(return可写可不写)
①写了return 后面跟了值/变量,调用这个函数就会得到return后面的值
②return是函数运行结束的标识符
③如果不写return或者 写了return 但是后面不写值或者变量,默认返回None
④如果需要函数返回数据就可以写return后面,如果不需要函数返回任何数据可以不写
示例:
# 定义函数
def test(name):
print(name)
# 调用函数
test("Mr.c")
变量作用域:
局部变量:函数内部定义的变量–只能在函数内部使用的变量
全局变量:函数外部定义的变量–全局使用(整个py文件)
全局变量修改:
1.任何一个子函数,直接使用全局变量,不对它进行修改的话,则是共享全局变量
2.如果某个子函数对全局变量进行修改,全局变量是不可变类型,相当于子函数创建了一个局部变量
3.全局变量是可变类型,相当于修改全局变量
实例:
test_list = [1, 2, 3] # 全局变量
test_str = 123
def test_01():
print("函数内部的list:", test_str)
def test_02():
test_list.append(4)
print("test_01函数内部的list:", test_list)
test_01()
test_02()
实例输出结果:
函数内部的list: 123
test_01函数内部的list: [1, 2, 3, 4]
global关键字使用:
global关键字引用全局变量
实例:
test_list = [1,2,3] # 全局变量,作用域(整个当前py文件内使用)
def test_01():
global test_list_2 # globals()引用全局变量
test_list_2 = [1,2,3,4] # 局部变量,只能在test_01函数内使用
print("函数内部的list:",test_list)
def test_02():
print("test_01函数内部的list:",test_list_2)
test_01()
test_02()
实例输出结果:
函数内部的list: [1, 2, 3]
test_01函数内部的list: [1, 2, 3, 4]
学习完,就好好熟悉一下吧(* ̄︶ ̄)。
游戏结束:==over== |