函数定义
def filterchar(string):
'''功能:过滤危险字符(如黑客),并将过滤后的结果输出
about:要过滤的字符串
没有返回值'''
import re #导入Python的re模块
pattern = r'(黑客)|(抓包)|(监听)|(Trojan)' # 模式字符串
sub = re. sub(pattern, '@_ _@', string) #进行模式替换
print(sub)
函数调用
about = '我是一名程序员,喜欢看黑客方面的图书,想研究一下Trojan。'
filterchar ( about)
参数传递
# 定义函数
def demo(obj):
print("原值:",obj)
obj += obj
#调用函数
print("=========值传递========")
mot = "唯有在被追赶的时候,你才能真正地奔跑。"
print("函数调用前:",mot)
demo(mot) #采用不可变对象——字符串
print("函数调用后:",mot)
print("=========引用传递 ========")
list1 = ['邓肯','吉诺比利','帕克']
print("函数调用前:",list1)
demo(list1) #采用可变对象——列表
print("函数调用后:",list1)
- 数量必须与定义时一致
- 位置必须与定义时一致
关键字参数
关键字参数是指使用形参的名字来确定输入的参数值。通过该方式指定实参时,不再需要与形参的位置完全一致,只要将参数名写正确即可。这样可以避免用户需要牢记参数位置的麻烦,使得函数的调用和参数传递更加灵活方便。
fun_bmi( height = 1.83, weight = 60,person = "路人甲") #计算路人甲的BMI指数
参数默认值
调用函数时,如果没有指定某个参数将抛出异常,即在定义函数时,直接指定形式参数的默认值。这样,当没有传入参数时,则直接使用定义函数时设置的默认值。
def demo(obj=None) : #定义一个函数
if obj==None: #判断是否为空
obj = []
print("obj的值: " ,obj) #输出obj的值
obj. append(1) #连续调用并输出
demo()
demo()
可变参数
在Python中,还可以定义可变参数。可变参数也称为不定长参数,即传入函数中的实际参数可以是0个、一个、两个到任意个。
定义可变参数时,主要有两种形式:一种 是*parameter,另一种是 **parameter。
- *parameter
这种形式表示接收任意多个实际参数并将其放到一个元组中。 - **parameter
这种形式表示接收任意多个显式赋值的实际参数,并将其放到一个字典中。
def printplayer(*name): # 定义输出我喜欢的NBA球员的函数
print('\n我喜欢的NBA球员有:')
for item in name:
print(item) # 输出球员名称
printplayer('邓肯')
printplayer('邓肯', '乔丹', '吉诺比利', '帕克')
printplayer('邓肯', '大卫罗宾逊', '卡特', '鲍文')
# 使用已存在的列表
param=['邓肯', '乔丹', '吉诺比利', '帕克']
printplayer(*param)
def printsign(**sign): # 定义输出姓名和绰号的函数
print() # 输出一个空行
for key, value in sign.items(): # 遍历字典
print("[" + key + "] 的绰号是:" + value) # 输出组合后的信息
printsign(邓肯='石佛', 罗宾逊='海军上将')
printsign(吉诺比利='妖刀', 帕克='跑车', 鲍文='鲍三叔')
# 使用已存在的字典作为函数的可变参数
dict1 = {'邓肯':'石佛', '罗宾逊':'海军上将','吉诺比利':'妖刀'} #定义一个字典
printsign(**dict1) #通过字典指定函数的可变参数