目录
一:函数的定义 & 函数的调用
py脚本,运行程序,从上至下,执行
因此必须严格要求:函数要先定义、后调用
""" def 函数名(形参列表): 代码块 """
demo_function.py
# 函数定义
def isOdd(num):
print(num)
if __name__ == '__main__': # 程序运行
isOdd(10) # 函数调用
输出结果:
10
二:py脚本名 即为模块名称
每写一个py脚本,都可以称之为一个模块
py脚本的名称就是模块名称
可以先新建一个demo_test.py,
demo_test.py中再引用demo_function模块
# 从模块中引用所有的内容
from demo_function import * # 模块
isOdd(10)
输出结果:
10
三:脚本程序主入口
写在__name__中(模块名称的内置写法)的代码
只会在当前脚本中调用 引用是不会执行的
if __name__ == '__main__': # 程序运行
# 写在此条件下的代码,只会在当前脚本中调用
isOdd(10) # 函数调用
四:函数的形参 & 函数的实参
1 按值传递
demo_function.py
def isOdd(num):
num += 2 # 函数内部num改变
print("函数内部的num = ", num) # 函数内部的num
if __name__ == '__main__':
# 程序主入口
isOdd(10)
demo_test.py
from demo_function import * # 模块
num = 10
isOdd(num) # 函数调用 实参
print("函数外部的num = ", num) # 函数外部num不变
在demo_test.py 中运行
输出结果:
函数内部的num = 12
函数外部的num = 10
2 引用传递
函数内部添加元素,函数外部也会添加函数
即函数内部改变,函数外部也改变
demo_function.py
def print_list(list1):
list1.append(10) # 添加一个元素10
print("函数内部输出结果:", list1)
if __name__ == '__main__':
# 程序主入口
pass
demo_test.py
from demo_function import * # 模块
# 列表 定义
list1 = [1, 2, 3]
# 函数调用
print_list(list1)
print("函数外部输出结果:", list1)
demo_test.py 中运行
输出结果:
函数内部输出结果: [1, 2, 3, 10]
函数外部输出结果: [1, 2, 3, 10]
五:必须参数、默认值参数、关键字参数、不定长参数
1 必须参数
一定要传参并且传参的形式要正确才可以
以下示例均在demo_function.py 中测试运行
def isOdd(num): # 必须参数
num += 2
print(num)
if __name__ == '__main__':
# 程序主入口
isOdd(10) # 必须参数:一定要传参
输出结果:
12
2 默认值参数
没有传参时候,使用默认值参数
有传参时候,使用传参
# 默认值参数
def connect_fun(ip="127.0.0.1", port=1234, name="root", pwd="123456"):
print("ip", ip, "ip连接成功")
print("port", port, "端口连接成功")
if __name__ == '__main__':
# 程序主入口
connect_fun()
输出结果:没有传参,使用默认值参数
ip 127.0.0.1 ip连接成功
port 1234 端口连接成功
有传参时候,使用传参
connect_fun("192.168.123.123", 3306)
输出结果:
ip 192.168.123.123 ip连接成功
port 3306 端口连接成功
若是普通写法 一定要注意传参顺序,
如果传参顺序打乱就可使用关键字参数
3 关键字参数
可以不按照传参顺序,通过key键传参
def connect_fun(ip="127.0.0.1", port=1234, name="root", pwd="123456"):
print("ip", ip, "ip连接成功")
print("port", port, "端口连接成功")
print("name", name, "用户连接成功")
if __name__ == '__main__':
# 程序主入口
# 关键字参数
connect_fun(ip="192.168.123.123", name="crh", port=3306)
输出结果:
ip 192.168.123.123 ip连接成功
port 3306 端口连接成功
name crh 用户连接成功
4 不定长参数
函数参数 使用*一个星号--元组tuple 接收函数传参中多出来的数据
def addUser(name, id, *edu): # 教育经历*edu 多个教育添加到元组
# 不定长参数 没有变量名的数据添加到tuple中
print(name, id, edu)
if __name__ == '__main__':
# 程序主入口
# 一个*代表不定长参数,多出来的参数添加到tuple中
addUser("lily", "350181200004141111", "洪塘小学", "福州三中", "福建师范大学")
输出结果:
lily 350181200004141111 ('洪塘小学', '福州三中', '福建师范大学')
不定长参数,元素求和 示例如下
def sum_fun(*argvs): # 求和函数
res = 0
for item in argvs:
res += item #全部元素求和
return res
if __name__ == '__main__':
# 程序主入口
# 不定长参数
res = sum_fun(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
print(res)
输出结果:
55
不定长参数,求元素的平均值 示例如下
def avg_fun(*argvs): # 平均数求值
res = 0
for item in argvs:
res += item # 先元素求和
return res / len(argvs) # 总和除以总长即平均
if __name__ == '__main__':
# 程序主入口
# 不定长参数 求平均
res = avg_fun(1, 2, 3, 4, 5)
print(res)
输出结果:
3.0
不定长参数
**两个星号 多出来的函数参数会以字典 dict 接收数据
def addUser(name, id, *edu, **info):
# 不定长参数 *:多出来的参数添加到tuple中
# **:多出来的参数添加到tuple中
print(name, id, edu)
print(info, type(info))
if __name__ == '__main__':
# 程序主入口
addUser("lily", "350181200004141111", "洪塘小学", "福州三中", "福建师范大学",
hobby='dance',
skill=['coding', 'swimming'])
输出结果:
lily 350181200004141111 ('洪塘小学', '福州三中', '福建师范大学')
{'hobby': 'dance', 'skill': ['coding', 'swimming']} <class 'dict'>