标签:
创建函数
def function_name(arguments): """function documention_string""" function_body_suite
1、声明与定义:
2、前向引用
和其他高级语言类似,Python不允许在函数未声明之前对它引用或调用。
3、函数的属性
比如创建两个Py文件,test1.py;test2.py,如下:
test1.py -------------------------- ST = ‘test1‘ def bar(): ‘‘‘This is bar‘‘‘ print ‘ok‘
#函数必定有返回值,默认为None
test2.py
-------------------------------------- import test1 print test1.ST print test1.bar() #-----------输出 #test1 #ok #None #-----------记得过程是返回值None的函数 def foo(): ‘‘‘This is foo‘‘‘ print ‘foo‘ print foo.__doc__ #This is foo
4、嵌套函数
>>> def foo():
def bar(): print ‘bar() is called‘ print ‘foo() is called‘ bar() >>> foo() foo() is called bar() is called >>> bar()
Traceback (most recent call last): File "<pyshell#5>", line 1, in <module> bar() NameError: name ‘bar‘ is not defined
因为bar()的作用域在foo()里面,在外面不能引用bar。
5、传递函数
1、其他变量可做函数的别名,因为对象的引用
所有对象都是通过引用来传递的,函数也不例外,当对一个变量赋值时,实际上是将相同对象的引用赋值给了这个变量。如果对象是函数的话,这个对象的所有别名都是可调用的。
print ‘foo‘ bar = foo #函数对象的引用 bar() #函数对象的调用 #输出foo
注意:foo:函数对象的引用;foo():函数对象的调用
2、函数作为参数传入其他函数来调用
时刻要记住:函数对象、引用与调用的区别,这几个关键字眼。
print ‘foo‘ def bar(argfunc): print ‘in bar()‘ argfunc() bar(foo) #把函数作为参数传入其他函数来调用 #输出: #in bar() #foo
在如下:
def convert(argfunc,seq): return [argfunc(obj) for obj in seq] lis = [123,15.23,-6.2e5,99999999L] print convert(int, lis) #[123, 15, -620000, 99999999] print convert(float,lis)#[123.0, 15.23, -620000.0, 99999999.0] print convert(long, lis)#[123L, 15L, -620000L, 99999999L]
1、位置参数
以函数定义的准确顺序来传递,如果没有任何默认参数的下,传入参数个数也要一致。
常见错误如下:
takes no arguments (1 given)
takes exactly 2 arguments (1 given)等等
2、默认参数
def foo(arg,default1 = ‘Python‘,default2 = ‘Django‘): pass
每一个默认参数后面都紧跟一个默认值的赋值语句,如果在函数调用时没有给出值,则使用默认的值。
默认参数最好写在最后
3、关键字参数
def foo(arg,obj1=‘good‘,obj2=10): return arg,obj1,obj2 print foo(arg=‘Begin‘) #(‘Begin‘, ‘good‘, 10) print foo(‘Begin‘) #(‘Begin‘, ‘good‘, 10) print foo(‘Begin‘,‘Python‘) #(‘Begin‘, ‘Python‘, 10) #print foo(arg=‘Begin‘,100) #出错 print foo(arg=‘Begin‘,obj2=100) #(‘Begin‘, ‘good‘, 100) print foo(obj2=100,arg=‘Begin‘,obj1=‘Ok‘) #(‘Begin‘, ‘Ok‘, 100)
7、可变长度的参数
1、变长参数与非变长参数
"""在参数名之前使用一个星号,就是让函数接受任意多的位置参数""" def multiply(*args): total = 1 for arg in args: total+=arg return total print multiply() #1 print multiply(1,2) #4 print multiply(4,5,6) #16
def multiply2(**kwargs): for key,value in kwargs.items(): print ‘%s=>%s‘ %(key,value) multiply2() multiply2(name=‘begin‘) #name=>begin multiply2(name=‘begin‘,age=‘22‘,tel=110)
#顺序 def complex_function(a,b = None , * args, * * kwarg): pass #测试 def add(a,b,c): return a + b + c print add(a = 10 ,b = 10 ,c = 10 ) args = ( 2 , 3 ) print add( 1 , * args) #6 kwargs = { ‘b‘ : 100 , ‘c‘ : 200 } print add( 100 , * * kwargs) #400 print add(a = 100 , * * kwargs) #400 #print add(a=100,*args) #TypeError: add() got multiple values for keyword argument ‘a‘ print add( 1 , 2 ,c = 3 ) #6 print add( 1 , 2 ,b = 3 ) # add() got multiple values for keyword argument ‘b‘ |
if 5>3 else 0
是先输出结果,再判定条件
输出1,如果5大于3,否则输出0
标签:
原文地址:http://www.cnblogs.com/muzinan110/p/4919711.html