函数的定义:
函数的组成:

定义和调用函数

# 函数名:1. 名字最好能体现函数的功能,一般用小写字母和单下划线、数字等组合 # 2. 不可与内置函数重名(内置函数不需要定义即可直接使用) def math(x): # 参数:根据函数功能,括号里可以有多个参数,也可以不带参数,命名规则与函数名相同 # 规范:括号是英文括号,后面的冒号不能丢 y = 3x + 5 # 函数体:函数的执行过程,体现函数功能的语句,要缩进,一般是四个空格 return y # return语句:后面可以接多种数据类型,如果函数不需要返回值的话,可以省略
讯享网
讯享网def math(x): y = x 2 + x return y a = math(10) print(a)
运行结果:

def menu(appetizer, course): print('一份开胃菜:' + appetizer) print('一份主食:' + course) menu('话梅花生','牛肉拉面')
运行结果:

讯享网def menu(appetizer, course): print('一份开胃菜:' + appetizer) print('一份主食:' + course + '\n') #还记得转义字符\n吧,表示换行 menu('牛肉拉面','话梅花生') menu('话梅花生','牛肉拉面') #如果采用下面这种形式传递,就不需要理会参数位置 menu(course = '牛肉拉面', appetizer = '话梅花生')
运行结果:

当然,当有三个或以上的参数也是要按顺序传递,这里我就不举例了。我想位置参数是怎么一回事,你已经明白了。
回到这个食堂,经营一阵之后,为了吸引更多的人流,你决定给每个顾客免费送上一份甜品绿豆沙,这时候你就可以用到【默认参数】,直接在定义函数的时候里给参数赋值。
需要注意的是:默认参数必须放在位置参数之后。我们来看看代码
def menu(appetizer, course, dessert = '绿豆沙'): print('一份开胃菜:' + appetizer) print('一份主食:' + course) print('一份甜品:' + dessert) menu('话梅花生','牛肉拉面') #因为已经默认将'绿豆沙'传递给dessert,调用时无须再传递。
运行结果;

默认参数也是可以改变的:
讯享网def menu(appetizer, course, dessert = '绿豆沙'): print('一份开胃菜:' + appetizer) print('一份主食:' + course) print('一份甜品:' + dessert) menu('话梅花生','牛肉拉面') menu('话梅花生','牛肉拉面','银耳羹') #银耳羹对应参数dessert
运行结果:

可变参数
def menu(*barbeque): return barbeque order = menu('烤鸡翅','烤茄子','烤玉米') #括号里的这几个值都会传递给参数barbeque print(order) print(type(order))
运行结果:

你会发现函数返回的是这样的结果:('烤鸡翅', '烤茄子', '烤玉米'),我们用type()函数可以知道这种数据类型叫作元组(tuple),曾在第4关的必做练习中与你打过照面。我们来稍微复习下:
元组的写法是将数据放在小括号()中,它的用法和列表用法类似,主要区别在于列表中的元素可以随时修改,但元组中的元素不可更改。
和列表一样,元组是可迭代对象,这意味着我们可以用for循环来遍历它,这时候的代码就可以写成:

讯享网def menu(*barbeque): for i in barbeque: print('一份烤串:' + i) menu('烤香肠', '烤肉丸') menu('烤鸡翅', '烤茄子', '烤玉米') # 不定长参数可以接收任意数量的值
运行结果:

print函数定义
print(*objects, sep = ' ', end = '\n', file = sys.stdout, flush = False)
可以看到第一个参数objects带了*号,为不定长参数——这也是为什么print()函数可以传递任意数量的参数。其余四个为默认参数,我们可以通过修改默认值来改变参数,对比一下下列代码的输出结果。
讯享网print('金枪鱼', '三文鱼', '鲷鱼') print('金枪鱼', '三文鱼', '鲷鱼', sep = '+') # sep控制多个值之间的分隔符,默认是空格 print('金枪鱼', '三文鱼', '鲷鱼', sep = '+', end = '=?') # end控制打印结果的结尾,默认是换行)
运行结果:

返回多个结果
import random appetizer = ['话梅花生','拍黄瓜','凉拌三丝'] def coupon(money): if money < 5: a = random.choice(appetizer) return a elif 5 < money < 10: b = random.choice (appetizer) return b, '溏心蛋' print(coupon(6)) print(type(coupon(6)))
运行结果:

讯享网import random appetizer = ['话梅花生','拍黄瓜','凉拌三丝'] def coupon(money): if money < 5: a = random.choice(appetizer) return a elif 5 < money < 10: b = random.choice (appetizer) return b, '溏心蛋' result = coupon(6) # result是一个元组 i=0 while i < len(result): print(result[i]) i = i+1
运行结果:

变量作用域
这就涉及一个变量作用域的问题:程序中的变量并不是在哪个位置都可以被使用的,使用权限决定于这个变量是在哪里赋值的。关于这个概念,目前我们只需要掌握下面两点即可:
第一点:一个在函数内部赋值的变量仅能在该函数内部使用(局部作用域),它们被称作【局部变量】,如cost()函数里的variable_cost。
第二点:在所有函数之外赋值的变量,可以在程序的任何位置使用(全局作用域),它们被称作【全局变量】,如第一行的rent。
rent = 3000 def cost(): global variable_cost utilities = int(input('请输入本月的水电费用')) food_cost = int(input('请输入本月的食材费用')) variable_cost = utilities + food_cost print('本月的变动成本是' + str(variable_cost)) def sum_cost(): sum = rent + variable_cost print('本月的总成本是' + str(sum)) cost() sum_cost()
运行结果:

global语句一般写在函数体的第一行,它会告诉Python,“我希望variable_cost是个全局变量,所以请不要用这个名字创建一个局部变量”。所以sum_cost()函数内部现在可以直接使用声明后的全局变量variable_cost。
函数嵌套:
讯享网rent = 3000 def cost(): utilities = int(input('请输入本月的水电费用')) food_cost = int(input('请输入本月的食材费用')) variable_cost = utilities + food_cost print('本月的变动成本是' + str(variable_cost)) return variable_cost def sum_cost(): sum = rent + cost() print('本月的总成本是' + str(sum)) sum_cost()
运行结果:

def div(num1, num2): growth = (num1 - num2) / num2 percent = str(growth * 100) + '%' return percent def warning(): print('Error: 你确定上个月一毛钱都不赚不亏吗?') def main(): while True: num1 = float(input('请输入本月所获利润')) num2 = float(input('请输入上月所获利润')) if num2 == 0: warning() else: print('本月的利润增长率:' + div(num1,num2)) break main()
运行结果:

所以虽然定义了三个函数,但最后只需调用main()函数即可
眼看要过年了,深夜食堂经营的不错,你打算给员工发奖金犒劳一下。请你定义函数,当输入员工姓名和工作时长两个参数,即可打印出该员工获得多少奖金。
发放奖金的要求如下:
- 工作时长不满六个月,发放固定奖金500元。
- 工作时长在六个月和一年之间(含一年),发放奖金120元*月数(如8个月为960元)
- 工作时长在一年以上,发放奖金180元*月数 (如20个月为3600元)
讯享网def bonus(month): if month < 6: money = 500 return money elif 6 <= month <= 12: money = 120 * month return money else: money = 180 * month return money def info(name, month): gain = bonus(month) print('%s来了%s个月,获得奖金%s元' % (name, month, gain)) info('大聪',14)


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/42325.html