[python]函数默认参数顺序问题】的更多相关文章

python 函数参数定义有四类: 1.必选参数:调用函数时候必须赋值的参数. a,须以正确的顺序传入函数b,调用时的数量必须和声明时的一样 def exa(x): return x #b作为参数进入函数体内 b=1 print exa() #错误 TypeError: exa() takes exactly 1 argument (0 given) 2,默认参数:初始已经有值,在调用时未更改使用默认值 def exa(x=1) return x 3,可变参数:不确定参数个数,会分配给带“*”参…
[转]Python函数默认参数陷阱 阅读目录 可变对象与不可变对象 函数默认参数陷阱 默认参数原理 避免 修饰器方法 扩展 参考 请看如下一段程序: def extend_list(v, li=[]): li.append(v) return li list1 = extend_list(10) list2 = extend_list(123, []) list3 = extend_list('a') print(list1) print(list2) print(list3) print(li…
请看如下一段程序: def extend_list(v, li=[]): li.append(v) return li list1 = extend_list(10) list2 = extend_list(123, []) list3 = extend_list('a') print(list1) print(list2) print(list3) print(list1 is list3) 请先猜想打印的结果: 是不是这样: [10] [123] [a] False 但是,实际的打印效果 请…
默认参数 设置默认参数时,有两点需要注意:一是必选参数在前,默认参数在后,否则python的解释器会报错二是当函数有多个参数时,把变化大的参数放前面,变化小的放后面,变化小的参数就可以作为默认参数 def power(x,n=2): s=1 while n>0: n=n-1 s=s*x return s print power(5,2) #25 print power(5) #25 调用power(5)时,相当于调用了power(5,2),而对于n>3的情况,就必须明确的传入n,比如power…
写python的都知道,python函数或者方法可以使用默认参数,比如 1 def foo(arg=None): 2 print(arg) 3 4 foo() 5 6 foo("hello world") 一个很简单的函数,参数arg默认使用None,当调用foo函数时,可以传入一个参数,也可以不传入参数,运行结果如下 1 None 2 hello world 这很好理解.默认参数是python一个很好的特性. 但是如果使用可变对象作为默认参数,就会引发问题.之前写过一个脚本,bug不…
对于学习python的人都有这样的困惑 def foo(a=[]): a.append(5) return a Python新手希望这个函数总是返回一个只包含一个元素的列表:[5].结果却非常不同,而且非常惊人(对于新手来说): >>> foo() [5] >>> foo() [5, 5] >>> foo() [5, 5, 5] >>> foo() [5, 5, 5, 5] >>> foo() 实际上,这不是设计缺陷…
1.代码在执行的过程中,遇到函数定义,初始化函数生成存储函数名,默认参数初识值,函数地址的函数对象. 2.代码执行不在初始化函数,而是直接执行函数体. 代码实例 这要从函数的特性说起,在 Python 中,函数是第一类对象(function is the first class object),换而言之,函数也是对象,跟整数.字符串一样可以赋值给变量.当做参数传递.还可以作为返回值.函数也有自己的属性,比如函数的名字.函数的默认参数列表. # 函数的名字 >>> func.__name_…
默认参数实际上只有一个值 代码1 def func(l = 1): l += 1 print(l) func() func() func() 代码2 lst = [] def func(a,l = lst): l.append(a) print(l)func(1) # [1] func(2,[]) # [2] func(3) # [1,3]变量是变量,值是值 变量的名字和有多少个值没有对应关系 我们在看修改的时候:要看修改的是哪一个对应的值而不是变量 def func(l = []): # 在函…
当def函数参数默认值为对象时,例如列表[],字典{} 示例1:猜测一下,会输出什么??? def ddd(a,b=[]): b.append(a) return b print(ddd(1)) print(ddd(2,['a','b','c'])) print(ddd(3)) [1]  ['a','b','c','2'] [3]   ?????你是否认为是这样? 输出一下看看 输出结果: D:\Python27\python.exe D:/untitled1/temp5.py [1] ['a'…
def add(a=3,b): print a,b add(4) 这样写的话,运行的话就会报错:SyntaxError: non-default argument follows default argument 意思就是默认赋值的参数必须在没有赋值的参数的后面 def add(a,b=3),函数这样定义的话下面调用的时候就不会报错了. 这也是在学习的过程中没有注意到的,在使用中才发现有这么一个坑.…
Python进阶-函数默认参数 写在前面 如非特别说明,下文均基于Python3 一.默认参数 python为了简化函数的调用,提供了默认参数机制: def pow(x, n = 2): r = 1 while n > 0: r *= x n -= 1 return r 这样在调用pow函数时,就可以省略最后一个参数不写: print(pow(5)) # output: 25 在定义有默认参数的函数时,需要注意以下: 必选参数必须在前面,默认参数在后: 设置何种参数为默认参数?一般来说,将参数值…
什么是函数 函数就是有特定功能的工具 # python中有内置函数(python解释器预先封装好的)与自定义函数(用户自定义封装的)之分 为什么要用函数 # 可以减少代码冗余,增加代码复用性 # 使代码逻辑更加清晰 # 一次编写,任意次数调用 函数定义 ''' 精简版定义: def 函数名(): 代码体 调用: 函数名() ''' 函数名命名规范 # 函数名的命名规则与变量名的一模一样 ,千万注意两点 # 不能以关键字作为函数名,避免与内置函数重名(比如内置函数 len)(******) , #…
一.C++中的函数重载 什么是函数重载? 我的理解是: (1)用一个函数名定义不同的函数: (2)函数名和不同参数搭配时函数会有不同的含义: 举例说明: #include <stdio.h> #include <string.h> int func(int x) { return x; } int func(int a, int b) { return a+b; } int func(const char* s) { return strlen(s); } int main(int…
详解python函数的参数 一.参数的定义 1.函数的参数在哪里定义 在python中定义函数的时候,函数名后面的括号里就是用来定义参数的,如果有多个参数的话,那么参数之间直接用逗号, 隔开 案列: # 利用函数的参数,定义一个可以完成任意两个数相加的函数 def add_num(a,b): c = a + b print(c) 2.带参数的函数调用: 函数定义了参数,那么调用函数的时候就需要传入参数 add_num(,) #运行结果 上面的案列中,我们定义函数的时候在函数名后面的括号里定义的参…
可变数据类型:列表.字典 不可变数据类型:整型.浮点型.字符串.元组 为什么可变数据类型不能作为python函数的参数?请看以下例子: def foo(a=[]): a.append(1) return a print(foo()) print(foo()) print(foo()) 结果: [1] [1, 1] [1, 1, 1] 我们继续打印下每次函数的返回值的内存地址: print(id(foo())) print(id(foo())) print(id(foo())) 结果: 14034…
初学Python的同学们看到代码中类似func(*args, **kwargs)这样的函数参数定义时,经常感到一头雾水. 下面通过一个简单的例子来详细解释下Python函数可变参数*args及**kwargs,先给出标准答案: 1. *args是arguments单词缩写,表示任意多个无名参数,是一个tuple,如 (1,2,3,'a','b','c') 2. **kwargs是keyword arguments单词缩写,表示关键字参数,是一个dict,如{'a':1,'b':2,'c':3}…
函数默认值是一个很提高鲁棒性的东西(就是让程序更健壮)MDN关于函数默认参数的描述:函数默认参数允许在没有值或undefined被传入时使用默认形参. ES5 使用逻辑或||来实现 众所周知,在ES5版本中,并没有提供的直接方法供我们我们处理函数默认值所以只能够自己去增强函数的功能,一般会这么来做: function doSomething (name, age) { name = name || 'default name' age = age || 18 console.log(name,…
1.python中默认缺省参数----定义默认参数要牢记一点:默认参数必须指向不变对象! 1 def foo(a,b=1): 2 print a,b 3 4 foo(2) #2 1 5 foo(3,100) #2 100 定义有默认参数的函数时,默认值参数位置必须都在非默认值参数后面. 调用时提供默认值参数值时,使用提供的值,否则使用默认值. 2.Python可以根据参数名传参数 1 def foo(ip,port): 2 print "%s:%d" % (ip,port) 3 4 f…
Python 的内建标准类型有一种分类标准是分为可变类型与不可变类型: 可变类型:列表.字典 不可变类型:数字.字符串.元组 因为变量保存的实际都是对象的引用,所以在给一个不可变类型(比如 int)的变量 a 赋新值的时候,你实际上是在内存中新建了一个对象,并将 a 指向这个新的对象,然后将原对象的引用计数 –1. 比如下面的示例: >>> id(1),id(2) (507098784, 507098816) >>> a = 1 >>> id(a) 5…
发现C/C++  Python的函数可以使用默认参数,来减少传参时候的参数个数. 但是:这样的默认参数最好是不变对象! #include <stdio.h> #include <string.h> void func_1(int id, char s[], char city[] = "Bejing") { printf("%d, %s, %s",id, s, city); } int main() { func_1(, "李金旭&…
坑 当你的默认参数如果是可变的数据类型,你要小心了 例题 # 正常没毛病的操作 def func(a,b=False): print(a) print(b) func(1,True) # 在实参角度,传的的True对默认关键字参数进行了修改操作 # 结果 1 True # 坑来了 # 就是当你的默认参数如果是可变的数据类型,你要小心了 # 也就是 def func(a,b=[1,2,3,4])这个时候要小心b列表中的内容 def func(a,1i=[]): li.append(a) retur…
参数组合 在Python中定义函数,可以用必选参数.默认参数.可变参数.关键字参数和命名关键字参数,这5种参数都可以组合使用.但是请注意,参数定义的顺序必须是:必选参数.默认参数.可变参数.命名关键字参数和关键字参数. 比如定义一个函数,包含上述若干种参数: def f1(a, b, c=0, *args, **kw): print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw) def f2(a, b, c=0, *, d,…
函数搞不熟,后边就晕头转向了,在此重新归纳一下廖大神的函数教程,加深记忆 一.函数的参数分为: 位置参数 def power(x): # x 就是power(x)的一个位置参数,我们调用power(x)必须传入一个参数x return x * x 默认参数 def power(x, n=2): #修改后的power()函数有两个位置参数,调用函数时如果传入两个参数,会依次传给x,n; s = 1 #如果仅仅传入一个参数的话,那么n=2就是一个默认参数,默认为2,这就是默认参数 while n >…
Python的函数除了正常使用的必选参数外,还可以使用默认参数.可变参数和关键字参数. 默认参数 基本使用 默认参数就是可以给特定的参数设置一个默认值,调用函数时,有默认值得参数可以不进行赋值,如: def power(x, n=2): s=1 while n > 0: n = n - 1 s = s * x return s 这样调用power(5)时,相当于调用power(5, 2). 设置默认参数时的注意事项: 一是必选参数必须在前,默认参数在后,否则Python的解释器会报错: 二是如何…
按"指针"传递 python中变量赋值.参数传递都是通过"指针"拷贝的方式进行的.除了按"指针"拷贝,还有一种按值拷贝的方式,关于按值.按指针拷贝的细节,参见按值传递 vs. 按指针传递. 所以在python中,变量赋值.参数传递,都只是拷贝了源数据的一个地址,而不会拷贝内存中完整的数据对象副本.所以,如果在函数内部修改变量指向的数据对象,会影响函数外部的数据. 例如: def f(x): print(x+3) a=4 f(a) 在将a赋值给本地…
定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解. Python的函数定义非常简单,但灵活度却非常大.除了正常定义的必选参数外,还可以使用默认参数.可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码. 默认参数 我们仍以具体的例子来说明如何定义函数的默认参数.先写一个计算x2的函数: def power(x…
在Python中定义函数,可以用必选参数.默认参数.可变参数和关键字参数,这4种参数都可以一起使用,或者只用其中某些,但是请注意,参数定义的顺序必须是:必选参数.默认参数.可变参数和关键字参数 定义一个函数,包含上述4种参数: def func(a,b,c=0,*args,**kw): print 'a=',a,'b=',b,'c=',c,'args=',args,'kw=',kw 在函数调用的时候,Python解释器自动按照参数位置和参数名把对应的参数传进去. print func(1,2)…
在学习Python函数的时候,函数本身的定义和调用并不是很复杂,但是函数的参数类型和用法的确有些复杂.在此做一个小结,加深理解. Python参数的定义 负责给函数提供一些必要的数据或信息,以保证函数的正常运行. 形式参数(parameter):在函数定义的时候使用到的参数,一般没有赋值(默认参数除外). 实参(argument):在函数调用的时候实际赋予的值. 如果在函数定义时给定了形式参数,并且没有给该参数默认值,则在调用的时候必须给定一个实参 def SayHello(person): p…
## 函数 - 函数是代码的一种组织形式,一般一个函数完成一个特定功能 - 函数需要先定义后使用 - 函数的定义 def func_name(参数): func_body ... return func_result ## 函数的返回值 - 函数和过程的区别就在于有没有返回值 - 用return关键字表示返回内容 - 函数内在执行到return语句后,整个函数无条件结束执行 - 若在函数定义时没有明确的写明return内容,则该函数默认返回None - 推荐无论函数有没有返回值都以return结…
函数:指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可. def sayhi( ): # 函数名 print('hello world') sayhi( ) #调用函数 , 调用函数时要加上括号(), 不加的话调用的是定义函数名的那个内存地址 示例: #普通代码: a,b = 5,8 # 这句话的意思是给两个变量a,b 分别赋值5和8, 即 a= 8, b=8 c= a**b print(c) #改成用函数写: def calc(x,y) : res =…