函数基础--函数的定义和调用,参数与返回值
来源:互联网 发布:博微预算软件 编辑:程序博客网 时间:2024/05/16 15:30
函数的定义和调用:
def func(para,para1,para2...): # 定义函数 funct_body return value value = func(arg, arg1, arg2...)#调用函数,传递参数,接收返回值 print(value)
返回值
返回值为None:函数中没有return 或者 return后面没有值 。
return关键字:返回函数计算的值,结束函数
返回一个值,可以是任意的数据类型,返回什么就接收什么
返回多个值:
1,用一个变量去接收,得到打包多个值的元组
2,用多个变量去接收,返回值的个数和接收变量的个数要保持一致
def func(*args): return argsprint(func(1, 2, 3, 4, 5))>>>(1, 2, 3, 4, 5)
参数(argument):
函数参数分为实际参数(实参),形式参数(形参)。
实参是传递给函数执行的对象,形参则是供实参指向的变量。
因此看一段函数代码,看实参不看形参,形参就是实参的指向。
站在传参(实参)的角度考虑参数,有两种传参类型:
位置参数(positional argument) 实参对象位置发生变化,返回值也会发什么变化(其实还是“引用”吧)
关键字参数(keyword argument) 在实参中可设置参数为 arg = ‘para’ , arg1 =’para1’
,arg2 = ‘para2’ 无论arg,arg1,arg2的位置怎么变化, 返回值都会按关键字参数规定检索返回相应的值。
注意:位置参数和关键字参数混用时, 关键字参数要在后。为什么?规定,要不报错。
站在接收参数的角度考虑:
位置参数(positional argument)
默认参数 (default argument) 处理数据时,可将数据中重复量比较大的值设为默认参数。 def func(para,
default=): func_body return values 如果实参给默认参数传递了数据,传什么接收什么。
‘陷阱’—>默认参数尽量避免可变数据类型,同样位置参数要在默认参数的前面。
动态参数
#关于默认参数的‘陷阱’问题def extendlist(val, list=[]): list.append(val) return listlist1 = extendlist(10) # list1和list2共用的是一个列表list2 = extendlist(123, []) # list3传了一个新列表list3 = extendlist('a')print(list1)print(list2)print(list3)
动态参数:
当不确定传参个数时可以使用动态参数接收传参。
*参数名,常用*args,接收所有的位置参数。
def func(*args): return valueprint(func(arg1,arg2,arg3,arg4....))
#求和函数def my_sum(*args): sum = 0 for i in args: sum += i return sumret = my_sum(1, 2, 3, 4)print(ret)# 那如果要传一个列表呢,会返回什么?ret = my_sum([1, 2, 3, 4, 5])print(ret) # >>> TypeError: unsupported operand type(s) for +=: 'int' and 'list'#动态参数的陷阱
def func(*args): print(args)func([1, 2, 3, 4, 5])#>>>([1, 2, 3, 4, 5],)#可以看到传递不是列表中的元素,而是整个列表如果要实现传递元素的效果,在列表前面加*就可以。不仅仅适用于列表,对于元组,字符串也同样适用,*list,*tuple, *string可以迭代的传入自身所包含的元素def func(*args): print(args)func(*[1, 2, 3, 4, 5])func(*[1, 2, 4, 5, 6], *[7, 8, 9, 10, 11])func(*'abc', *'efg', *'khi')#>>>(1, 2, 3, 4, 5)(1, 2, 4, 5, 6, 7, 8, 9, 10, 11)('a', 'b', 'c', 'e', 'f', 'g', 'k', 'h', 'i')
因此,
*args 的陷阱:
如果想把一个可迭代对象传进函数执行,但是执行对象是可迭代对象中的元素,这时需要在可迭代对象前面加上*,可以把每一个元素迭代的传入函数。
**参数名,常用**kwargs,接收所有的关键字参数。
def func(**kwargs): print(kwargs)func(name='mui', age=19, hobby='movies') # >>> {'name': 'mui', 'age': 19, 'hobby': 'movies'}会以字典的形式返回
形参角度,所有的参数类型混合时
def func(para, *args, key=None, **kwargs): pass
原因:
位置参数必须在前, 如果*args在前会接收所有的位置参数,
而默认参数(关键字参数)又不能在位置参数前面。
默认参数不能在*arg前面,如果传多个位置参数,
可能前面的位置参数接收不过来,而默认参数只能接收一个值,
多的就不知道接收哪个了就会报错。>>>func() got multiple values for argument ‘key’
**kwargs也不能在默认参数前面,会接收所有的关键字参数。
且传什么返回什么,动态参数可以不传,但是位置参数必须得传。
def func(a,*args,key = 'qqxing',**kwargs): print('a : ',a) print('args : ',args) print('key : ',key) print('kwargs : ',kwargs)func(5)func(5,6,7)func(5,6,7,b='hahaha',c='hehehe')func(5,6,7,key='小小酥',b='hahaha',c='hehehe')func(5,b='hahaha',c='hehehe')
- 函数基础--函数的定义和调用,参数与返回值
- 函数定义,调用,参数,返回值
- C-015.函数的基本概念、定义、调用、返回值、参数和声明
- 函数的定义与调用&&参数数组
- shell函数的定义,返回值和参数
- 函数调用中参数和返回值的拷贝
- c++基础之main函数的参数和返回值
- JavaScript-4.3函数的参数和返回值,参数数目不确定的函数调用---ShinePans
- Swift 2.0 函数 定义、调用、参数返回值、函数类型、嵌套函数
- js函数的基础应用:声明和调用、有参函数、无参函数、返回值
- javascript函数的定义与调用以及参数传递
- 零基础学python-2.19 定义函数、调用函数与默认参数
- X86和ARM:函数调用参数传递和返回值
- main函数的参数与返回值
- 函数的参数与返回值
- C语言:返回指针的函数,函数声明、定义和调用,嵌套调用
- 函数的定义与调用
- 函数的定义与调用
- Ubuntu16.04 PCL1.8.1源码安装
- LeetCode 70. Climbing Stairs (Easy)
- 萌新又试水了,这是第一个做好的程序
- 网络编程
- python 单下划线/双下划线使用总结
- 函数基础--函数的定义和调用,参数与返回值
- 软件开发人员常用网站整理
- 前端面试题之HTTP协议类
- SecureCRT 8.0 64位 安装教程
- 2017 ICPC 沈阳 C 计算几何
- 微信小程序开发-列表渲染和条件渲染
- OpenGL水面波动的设计与实现
- TypeScript自动引入脚本插件
- 动态规划 java 石子问题(直线)