标签:
创建函数
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)
| #顺序defcomplex_function(a,b=None,*args,**kwarg):    pass#测试defadd(a,b,c):    returna+b+cprintadd(a=10,b=10,c=10)args=(2,3)printadd(1,*args)  #6kwargs={‘b‘:100,‘c‘:200}printadd(100,**kwargs) #400printadd(a=100,**kwargs)   #400#print add(a=100,*args)      #TypeError: add() got multiple values for keyword argument ‘a‘printadd(1,2,c=3)  #6printadd(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