发布于2019-08-08 14:15 阅读(1006) 评论(0) 点赞(5) 收藏(3)
参数作用:如果外界希望在函数内部处理数据,就可以将数据作为参数传入函数内部;
返回值作用:如果希望一个函数函数执行完成后,向外界报告函数的执行结果,就可以使用函数的返回值。
可以用元组让函数返回多个值;如果函数返回的类型时元组,那么小括号可以省略;比如,以下两个就相等:
return (temp, humidity) = return temp, humidity
def measure():
"""
测量温度和湿度
:return: 返回温度和湿度结果的元组
"""
print("开始测量")
temp = "37"
humidity = "50"
print("测量结束")
# 可以用元组让函数返回多个值;如果函数返回的类型时元组,那么小括号可以省略
# return (temp, humidity)
return temp, humidity
result = measure()
print("温度为:", result[0])
print("湿度为:", result[1])
多个变量接收函数返回值示例
def measure():
"""
测量温度和湿度
:return: 返回温度和湿度结果的元组
"""
print("开始测量")
temp = "37"
humidity = "50"
print("测量结束")
return temp, humidity
result = gl_temp, gl_humidity = measure()
print("温度为:", gl_temp)
print("湿度为:", gl_humidity)
print("温度为:", result[0])
print("湿度为:", result[1])
函数内部形参重赋值不会影响外部实参
只要针对参数使用赋值语句,会在函数内部修改局部变量的引用,不会影响到外部变量的引用
形参重赋值示例
def test(num, num_list):
print("现在是函数内部")
num = 1000
num_list = [22, 33, 44, 55]
print(num)
print(num_list)
num = 10
num_list = [1, 2, 3, 4]
test(num, num_list) # 1000 [22, 33, 44, 55]
print(num) # 10
print(num_list) # [1, 2, 3, 4]
函数内部形参修改会影响外部实参
如果传递的参数是可变类型,在函数内部,使用方法修改了数据的内容,同样会影响到外部的数据。
但如果我们针对可变类型参数 只用方法改变参数数据,不重新赋值,就会影响到形参在函数外部的使用了;
这是因为我们在传参是传的是变量的引用,而在函数内部也没有对形参进行局部变量覆盖,一直用的就是变量的引用,所以当我们用方法修改可变类型参数时,会直接修改外部的变量。
def test(num_list):
print("现在是函数内部")
num_list.append(9)
print(num_list)
num_list = [2, 4, 6]
print("进入函数前列表:", num_list)
test(num_list)
print("现在是函数外部")
print("从函数出来后列表:", num_list)
# 进入函数前列表: [2, 4, 6]
# 现在是函数内部
# [2, 4, 6, 9]
# 现在是函数外部
# 从函数出来后列表: [2, 4, 6, 9]
extend方法与+= 示例
# 列表调用+=本质是调用extend方法
def test(num, num_list):
print("进入函数内,尚未修改前的传参变量如下两个")
print(num)
print("num_list:", num_list)
# num_list = num_list + num_list # 不会修改函数外部的变量
num_list += num_list
print("+=修改后的num_list:", num_list)
pass
num = 10
num_list = [1, 3, 5]
print("原始的num_list:", num_list)
test(num, num_list)
print("函数执行完成后的num_list:", num_list)
# 原始的num_list: [1, 3, 5]
# 进入函数内,尚未修改前的传参变量如下两个
# 10
# num_list: [1, 3, 5]
# +=修改后的num_list: [1, 3, 5, 1, 3, 5]
# 函数执行完成后的num_list: [1, 3, 5, 1, 3, 5]
其实在列表的sort方法,就是使用的缺省参数,默认reverse为True,只有在需要降序的时候才会写reverse = False
缺省参数语法
def 函数名(参数1,参数2,...,参数x=默认值):
pass
指定缺省函数的默认值
def test(name, gender=True):
gender_text = "男生"
if not gender:
gender_text = "女生"
print("%s 是 %s" % (name, gender_text))
test("喜羊羊")
test("沸羊羊")
test("美羊羊", gender=False)
# 喜羊羊 是 男生
# 沸羊羊 是 男生
# 美羊羊 是 女生
指定缺省函数的默认值,只需要在函数传参处定义一个赋值语句给定默认值即可;应注意,默认值应该是出现最常见的值;
调用带有多个缺省参数的函数
def test(name, title="干事", gender=True):
gender_text = "男生"
if not gender:
gender_text = "女生"
print("%s 是 %s, 职位是 %s" % (name, gender_text, title))
test("喜羊羊")
test("沸羊羊", "劳动委员")
test("美羊羊", gender=False)
test("暖羊羊", "班长", gender=False)
# 喜羊羊 是 男生, 职位是 干事
# 沸羊羊 是 男生, 职位是 劳动委员
# 美羊羊 是 女生, 职位是 干事
# 暖羊羊 是 女生, 职位是 班长
多值参数示例
def test(num, *nums_list, **info_dict):
print(num)
print(nums_list)
print(info_dict)
test(1)
test(1, 2, 3, 4, 5, name="zhangsan", gender="boy")
# 1
# ()
# {}
# 1
# (2, 3, 4, 5)
# {'name': 'zhangsan', 'gender': 'boy'}
多值参数求和案例
def sums(*args):
print(args)
s = 0
for num in args:
s += num
return s
result = sums(1, 2, 3, 4)
print(result)
# (1, 2, 3, 4)
# 10
在调用带有多值参数的函数时,如果希望 1.将一个元组变量,直接传递给args 2.将一个字典变量,直接传递给kwargs 的话,就可以使用拆包,简化参数的传递;
拆包的方式是:在元组变量前,增加一个*;在字典变量前,增加**
拆包示例
def test(*args, **kwargs):
"""传入一个元组和一个字典,并对它们分别进行输出"""
print(args)
print(kwargs)
t_tuple = (1, 2, 3, 4)
t_dict = {"name": "zhangsan", "age": "20"}
test(t_tuple, t_dict) # 这个并不能按照我们的想法进行传输
# 用拆包,简化元组/字典变量的传递
test(*t_tuple, **t_dict) # 这个的和下面是一样的
test(1, 2, 3, 4, name="zhangsan", age="20")
# ((1, 2, 3, 4), {'name': 'zhangsan', 'age': '20'})
# {}
# (1, 2, 3, 4)
# {'name': 'zhangsan', 'age': '20'}
# (1, 2, 3, 4)
# {'name': 'zhangsan', 'age': '20'}
函数调用自身的编程技巧称为递归。
递归函数的特点
函数递归示例
def sums(num):
print(num)
if num == 1:
return
sums(num-1)
sums(4) # 4 3 2 1
递归实现数字累加示例
def test(num):
"""计算1+...+num的结果"""
if num == 1:
return 1
temp = test(num-1)
# 两个相邻数字的相加
return num+temp
result = test(100)
print(result)
作者:大王叫我来巡山了
链接:https://www.pythonheidong.com/blog/article/14507/93f6ebfc1868957882be/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!