Python 函数定义以及参数传递
来源:互联网 发布:dior fix it 编辑:程序博客网 时间:2024/05/22 06:31
Python 函数定义以及参数传递
1.函数定义
#形如def func(args...): doSomething
以关键字def 开头,后面是函数名和参数下面是函数处理过程。
举例:
def add( a, b ): return a+b
参数可以设定默认值,如:
def add( a, b=10 ): #注意:默认值参数只会运算一次 return a+b
默认值参数只会运算一次是什么意思?
def func( a, b=[] ): #b的默认值指向一个空的列表,每次不带默认值都会指向这块内存 b.append(a) return bprint(func(1))#向默认的空列表里加入元素1 ,默认列表里已经是[1]print(func(2))#向默认的列表里加入元素2,默认列表里已经是[1,2]print(func(3,[]))#向b指向的空列表里加入元素1 ,默认列表里还是[1,2]print(func(4))#向默认的列表里加入元素4,默认列表里已经是[1,2,4]'''结果:[1][1, 2][3][1, 2, 4]'''
这下明白为什么默认参数只计算一次了吧,函数参数不传递时默认值总是指向固定的内存空间,就是第一次计算的空间。
2.参数传递
def func(a, b): print('a=%d, b=%d' % (a,b) )
在使用函数时可以如下方式,结果都是相同的
func(10,20) #不使用参数名,需要按参数顺序传递func(a=10,b=20) #使用参数名可以不按顺序传递func(b=20,a=10)#结果:a=10, b=20a=10, b=20a=10, b=20
如果函数定义形式如下方式:
def func(*args): #这种定义会把传递的参数包成元组 print(args,type(args))func(10,20)#结果:#(10, 20) <class 'tuple'>
举一个和上述过程相反的例子:
def func(a,b): print('a=%d, b=%d' % (a,b) )a = (10, 20)func(*a) #在调用函数使用`*`则会把元组解包成单个变量按顺序传入函数#结果:a=10, b=20
总结:*
号在定义函数参数时,传入函数的参数会转换成元组,如果 *
号在调用时则会把元组解包成单个元素。
另一种定义:
def func(**kw):#使用**定义参数会把传入参数包装成字典dict print(kw, type(kw) )func(a=10,b=20)#这种函数在使用时必须指定参数值,使用key=value这种形式#结果:{'b': 20, 'a': 10} <class 'dict'>
相反的例子:
def func(a,b): print('a=%d, b=%d' % (a,b) )d = {'a':10, 'b':20 }func(**d) #在调用时使用**会把字典解包成变量传入函数。
def func(*args, **kw):#这种形式的定义代表可以接受任意类型的参数 print(args,kw )
总结:**
号在定义函数参数时,传入函数的参数会转换成字典,如果 **
号在调用时则会把字典解包成单个元素。
lambda表达式
lambda表达式就是一种简单的函数
形如 f = lambda 参数1,参数2: 返回的计算值
例如:
add = lambda x,y: x+yprint(add(1,2))'''结果:3'''
1 0
- Python 函数定义以及参数传递
- Python函数可变参数定义及其参数传递方式详解
- 派生类的构造函数定义以及参数传递
- Lisp语言:函数的定义,调用以及参数的传递
- Lisp语言:函数的定义,调用以及参数的传递
- javascript函数的定义与调用以及参数传递
- Python学习def函数的定义、使用及参数传递
- Python学习def函数的定义、使用及参数传递
- python 函数参数传递
- python 函数参数传递
- Python函数参数传递以及变量作用域
- java类的定义以及参数传递
- Python - 不固定参数函数的定义,四种参数传递方法总结
- python中的函数参数传递
- python的函数参数传递
- python的函数参数传递
- Python的函数参数传递
- Python函数参数,值传递?
- 第四讲项目2-2 求r1与r2并联的阻值
- __attribute__的简简简单理解
- 归档模式下-丢失关键数据文件
- CS1041号错误是什么
- A. Mike and Fax
- Python 函数定义以及参数传递
- DMA Coherent Mapping
- 华为机试在线训练-牛客网(36)火车进站
- 向函数中传递指针和传递指针的引用的区别
- js中几种实用的跨域方法原理详解
- PAT考试大纲
- 100道动态规划——30 UVAlive 3907 Puzzle AC自动机上的动态规划,记忆化搜索
- 在一定相同的条件下合并数据的方式(日期相同的数据合并)
- 《C++Primer》读书笔记(三)字符串、向量、数组