8、函数
8.1 函数创建和调用
def filterchar(string):
import re
pattern = r'(黑客)|(抓包)|(监听)|(Trojan)'
sub = re.sub(pattern, '@_@', string)
print(sub)
about = '我是一名程序员,我喜欢看黑客方面的图书,想研究一下Trojan。'
filterchar(about)
# 我是一名程序员,我喜欢看@_@方面的图书,想研究一下@_@。
8.2 传递参数
8.2.1 了解形式参数和实际参数
分为将实际参数的值传递给形式参数和将实际参数的引用传递给形式参数两种情况。实际参数是不可变对象时进行值传递;当实际参数为可变对象时,进行的是引用传递。值传递后改变形参的值,实参不变;应用传递改变的形参的值,实参也改变。
def demo(obj):
print("原值是:", obj)
obj += obj
print("=======值传递=====================")
mot = '唯有在被追赶的时候,你才能真正的跑步'
print('函数调用前:', mot)
demo(mot)
print('函数调用后:', mot)
print("===============引用传递======================")
list1 = ['xiaoming', 'lily', 'xiaohong']
print('函数调用前:', list1)
demo(list1)
print('函数调用后:', list1)
'''
=======值传递=====================
函数调用前: 唯有在被追赶的时候,你才能真正的跑步
原值是: 唯有在被追赶的时候,你才能真正的跑步
函数调用后: 唯有在被追赶的时候,你才能真正的跑步
===============引用传递======================
函数调用前: ['xiaoming', 'lily', 'xiaohong']
原值是: ['xiaoming', 'lily', 'xiaohong']
函数调用后: ['xiaoming', 'lily', 'xiaohong', 'xiaoming', 'lily', 'xiaohong']
'''
8.2.2 位置参数
- 位置参数必须与定义时一致。
- 位置必须与定义时一致。
8.2.3 关键字参数
是指实用形参的名字来确定输入的参数值。不需要与形式参数位置完全一致。
fun_bmi(person, height, weight)
fun_bmi(height = 183, weight = 62, person = '小明')
8.2.4 为参数设置默认值
def fun_bmi(height, weight, person = '小明'):
print(person + '的身高是:', weight, '\t体重是:', weight)
fun_bmi(185, 65)
# 小明的身高是: 65 体重是: 65
8.2.5 可变参数
称为不定长参数,传入的函数中的实际参数可以是零个、一个、两个到任意个。
*parameter
表示可以接收任意多个实际参数并将其放到一个元组中。
def printcoffee(*coffeename):
print("我喜欢的咖啡有:")
for item in coffeename:
print(item)
printcoffee('蓝山')
printcoffee('卡布奇诺', '摩卡', '曼特宁')
'''
我喜欢的咖啡有:
蓝山
我喜欢的咖啡有:
卡布奇诺
摩卡
曼特宁
'''
**parameter
表示接收任意多个类似关键字参数一样显示赋值的实际参数,并将其放到一个字典中。
def printsign(**sign):
print()
for key, value in sign.items():
print("[" + key + "]的星座是:" + value)
printsign(琦梦 = '水瓶座', 冷檬 = '射手座')
printsign(香凝 = '双鱼座', 戴兰 = '双子座', 米线 = '摩羯座')
'''
[琦梦]的星座是:水瓶座
[冷檬]的星座是:射手座
[香凝]的星座是:双鱼座
[戴兰]的星座是:双子座
[米线]的星座是:摩羯座
'''
dict1 = {'香凝':'双鱼座', '戴兰':'双子座', '米线':'摩羯座'}
printsign(**dict1)
'''
[香凝]的星座是:双鱼座
[戴兰]的星座是:双子座
[米线]的星座是:摩羯座
'''
8.3 返回值
def fun_check(money):
money_old = sum(money)
money_new = money_old
if 500 <= money_old <= 1000:
money_new = '{:.2f}'.format(money_old * 0.9)
elif 1000 < money_old <= 2000:
money_new = '{:.2f}'.format(money_old * 0.8)
return money_old, money_new
print('开始结算.......\n')
list_money = []
while True:
inmoney = float(input('输入商品金额:'))
if int(inmoney) == 0:
break
else:
list_money.append(inmoney)
money = fun_check(list_money)
print('合计金额是:',money[0],"应付金额是:", money[1])
'''
输入商品金额:560
输入商品金额:1200
输入商品金额:0
合计金额是: 1760.0 应付金额是: 1408.00
'''
8.4 匿名函数
是指没有名字的函数。这样的函数只用一次。在python中,使用lambda表达式创建匿名函数。
计算圆面积的常规代码:
import cmath
def circlerear(r):
result = cmath.pi * r * r
return result
r = 10
print('半径为' + str(r) + '的面积是:' + str(circlerear(r)))
# 半径为10的面积是:314.1592653589793
使用lambda表达式的代码是:
reslut = lambda r : cmath.pi * r * r
print('半径为' + str(r) + '的面积是:' + str(reslut(r)))
# 半径为10的面积是:314.1592653589793