打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
第9关笔记

第9关 函数

课程目标

  1. 了解函数的作用
  1. 熟练掌握函数的参数类型以及参数传递
  1. 掌握函数的返回值及return语句的运用
  1. 了解全局变量和局部变量,以及将局部变量转换为全局变量的方法

课程难点

  1. 函数中参数的传递顺序
  1. 函数的返回值及return语句的运用

课程重要内容重现

一、函数

函数是组织好的、可以重复使用的、用来实现单一功能的代码。写为:函数名(参数名),注:括号内可以为空,也可以为多个参数,多个参数间用逗号隔开即可。

  1. 参数

函数中需要使用的变量,数量视情况而定。

1)位置参数

位置参数是描述总体最常用的一种参数。参数的顺序和个数要和函数定义中一致。例如:

def  menu(appetizer,course):
    print('一份开胃菜:'+appetizer)
    print('一份主食:'+course)

menu('话梅花生','牛肉拉面')
#'话梅花生''牛肉拉面'是对应参数appetizer和course的位置顺序传递的,所以被叫作【位置参数】

2)默认参数

默认参数必须放在位置参数之后。若调用函数时没有传递参数就为默认值,但如果调用时向默认参数传递了数据,则默认参数被新参数代替。

def  menu(appetizer,course,dessert='绿豆沙'):
    print('一份开胃菜:'+appetizer)
    print('一份主食:'+course)
    print('一份甜品:'+dessert)
menu('话梅花生','牛肉拉面')
#结果显示为:因为调用时只给了两个参数,第三个参数为默认值
#一份开胃菜:话梅花生
#一份主食:牛肉拉面
#一份甜品:绿豆沙
menu('话梅花生','牛肉拉面','银耳羹')
#结果显示为:因为调用时给了三个参数,第三个参数被更新
#一份开胃菜:话梅花生
#一份主食:牛肉拉面
#一份甜品:银耳羹

3)不定长参数

一个星号*加上参数名。当传入此处的参数数量不确定时使用,数据类型为元组(元组(tuple):写法是把数据放在小括号()中,它的用法和列表用法类似,主要区别在于列表中的元素可以随时修改,但元组中的元素不可更改。列表一样,元组是可迭代对象,这意味着我们可以用for循环来遍历它)。

  • 当默认参数在不定长参数后时,若想更改默认参数,需要注明dessert='银耳羹',例如:
def menu(appetizer,course,*barbeque,dessert='绿豆沙'):
    print('一份开胃菜:'+appetizer)
    print('一份主菜:'+course)
    print('一份甜品:'+dessert)
    for i in barbeque:
        print('一份烤串:'+i)
menu('话梅花生','牛肉拉面','烤鸡翅','烤茄子','烤玉米',dessert='银耳羹')
#结果显示为:
#一分开胃菜:话梅花生
#一份主菜:牛肉拉面
#一份甜品:银耳羹
#一份烤串:烤鸡翅
#一份烤串:烤茄子
#一份烤串:烤玉米
  • 当默认参数在不定长参数之前,则默认按顺序传递参数(默认参数会改变),剩下的参数均传递给不定长参数。
def menu(appetizer,course,dessert='绿豆沙',*barbeque):
    print('一份开胃菜:'+appetizer)
    print('一份主菜:'+course)
    print('一份甜品:'+dessert)
    for i in barbeque:
        print('一份烤串:'+i)
menu('话梅花生','牛肉拉面','银耳羹','烤鸡翅','烤茄子','烤玉米')
#结果显示为:
#一分开胃菜:话梅花生
#一份主菜:牛肉拉面
#一份甜品:银耳羹
#一份烤串:烤鸡翅
#一份烤串:烤茄子
#一份烤串:烤玉米
  1. 定义函数

语法:

def 函数名(参数1,参数2,...参数n)
函数体
return 语句

函数内部一旦遇到return语句,就会停止执行并返回结果。没有return语句的函数,Python也会在末尾隐性地加上return None,即返回None值(return None可以简写为return。)

  1. 调用函数

1)语法:函数名(参数)

参数从0个到多个都可以实现。但当参数个数为0时,括号也不能省略。

2)math(10)的意思是将整数10赋值给参数x并运行该函数。函数执行完毕后最终返回了y的值即110,然后将这个结果赋值给变量a,再用print()将变量a打印出来。

def math(x):
    y =  x ** 2 + x
    return y
a = math(10)
print(a)

3)也可以只用一行代码print(math(10))来表示同样的意思。

二、return语句

  1. return是返回值,当输入参数给函数,函数就会返回一个值,事实上每个函数都会有返回值。
  1. 如果不是立即要对函数返回值做操作,可以用return语句保留返回值。

需要多次调用函数时,可以定义一个主函数main(),调用非主函数的返回值。下面例子中的传参:main()函数中的李若彤→dream_face(位置参数)→face()函数的参数name,最终返回name + '的脸蛋'即李若彤的脸蛋。

def face(name):
    return name + '的脸蛋'
def body(name):
    return name + '的身材'
def main(dream_face,dream_body):
    return '我的梦中情人:' + face(dream_face) + ' + ' + body(dream_body)

print(main('李若彤','林志玲'))
  1. 若需要返回多个值,在return后用逗号隔开即可,此时返回的是一个元组。元组与列表其实都是数据的“序列”,元组取某个位置的值的操作,与列表是一模一样的,即元组名[i]。
def lover(name1,name2):
face = name1 + '的脸蛋'
body = name2 + '的身材'
return face,body
a=lover('李若彤','林志玲')
#此时return的值为元组 ('李若彤的脸蛋', '林志玲的身材'),并赋值给变量 a 。
print('我的梦中情人:'+a[0]+' + '+a[1])
  1. 没有return语句的函数会默认返回None值。
  1. 一旦函数内部遇到return语句,就会停止执行并返回结果。

三、变量的作用域

  1. 局部变量

函数内定义的变量,仅能在函数内部使用(局部作用域)

  1. 全局变量

所有函数之外赋值的变量,可以在程序的任何位置使用(全局作用域)

  1. 局部变量和全局变量不要取相同的名字,以免混淆。
  1. global语句:可以将局部变量转换为全局变量,一般写在函数体的第一行。
def egg():    
    global quantity
#global语句将变量quantity声明为全局变量
    quantity = 108
egg()
print(quantity)

四、函数的嵌套

sum = rent + cost() 的结果就是sum = rent + variable_cost(cost()函数的返回值)。最后调用函数时,也只需调用sum_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()

五、其他

  1. list()函数

可以将数据转换为列表。

  1. extend()函数
  • append() ,方法用于在列表末尾添加新的对象,只能添加一个值(多个值作为一个整体也行)。 
  • extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)如果extend的是字符串,则字符串会被拆分成字符数组,如果extend的是字典,则字典的key会被加入到ist中。
list1=[1,2]
list2=[2,4,5]
list3=[]
list2.append(list1)
print(list2)
#结果显示为:
#[2,4,5,[1,2]] list1的元素作为一个列表整体被加入list2
list3.extend(list1)
print(list3)
#结果显示
#[1,2]  list1的元素独立加入list3中
  1. (拓展一下下,感兴趣可以查一查哦~)*reversed()函数

reversed()函数可以将数据反转,从后往前迭代。

reversed()之后,第二次for循环、list()tuple()以及join()得到的结果都为空,原因就是b不是反转列表本身,而是一个列表反向迭代器,所以直接输出函数返回值会是类似于乱码,且reversed()之后,只在第一次遍历时返回值。

#参数是列表1
a=[1,2,3,4,5]
b=reversed(a)
print(a)
#结果显示为:
#[1, 2, 3, 4, 5]
print(b)
#结果显示为:
#<listreverseiterator object at 0x06A9E930>
for i in b:#第一次遍历
print(i)
#结果显示为:
#5 4 3 2 1
for i in b:#第二次遍历为空
print(i)
#结果显示为:啥也没有
#参数是列表2:
a=[1,2,3,4,5]
b=reversed(a)
print(list(b))#第一次转换为列表
#结果显示为:
#[5,4,3,2,1]
print(list(b))#第二次
#结果显示为:
#[]
#参数是元组
t=(4,5,6)
tt=reversed(t)
print(t)
#结果显示为:
#(4, 5, 6)

print(tt)
#结果显示为:
#<reversed object at 0x06A07E50>

print(tuple(tt))
#第一次转换为元组
#结果显示为
#(6, 5, 4)

print(tuple(tt))
#第二次为空
#结果显示为

#()

#参数是字符串
s='cba'
ss=reversed(s)
print(s)
#结果显示为
#'cba'
print(ss)
#结果显示为
#<reversed object at 0x06A07E70>
print(list(ss))#第一次转换为列表
#结果显示为
#['a', 'b', 'c']
print(list(ss))#第二次为空
#结果显示为
#[]
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
《计算机二级Python语言程序设计考试》第5章:函数和代码复用
python,day3,ji基础3
Python函数学习:一文即可
python变量之全局变量与局部变量的使用
循序渐进学Python之函数的嵌套
《Python编程快速上手——让繁琐的工作自动化》读书笔记2
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服