宽容他人,放过自己。

python 函数

Posted on By anchoriteFili

#!/usr/bin/python
# -*- coding: UTF-8 -*-

'''
    函数是组织好的,可重复使用的,用来实现单一,或相关功能的代码段
'''

def printime(str):
    print str
    return

printime('你好吗?????')

# 按值传递参数和按引用传递参数
# 所有参数(自变量)在Python里都是按引用传递。如果你在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了

def changeme(mylist):
    mylist.append([1, 2, 3, 4])
    print '函数内取值', mylist
    return

mylist = [10, 11, 12]
changeme(mylist)
print '函数外取值', mylist



'''
    必备参数
    必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
    调用printme()函数,你必须传入一个参数,不然会出现语法错误
'''

'''
    关键字参数
    关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值
    使用关键字参数允许函数调用时参数的顺序和声明时不一致,因为Python解释器能够用参数名匹配参数值
'''
def printinfo(name, age):
    print 'Name:', name
    print 'Age:', age
    return

printinfo(age = 50, name = '张三')

'''
    缺省参数
    调用函数时,缺省参数的值如果没有传入,则被认为是默认值。
'''
def printinfoOne(name, age = 3):
    print 'Name:', name
    print 'Age:', age
    return

printinfoOne(name = '李四')

'''
   不定长参数
   你可能需要一个函数能处理比当初声明时更多的参数,这些参数叫做不定长参数,
   加了星号(*)的变量名会存放所有未命名的变量参数,选择不多传参数也可
'''
def printinfoTwo(arg1, *vartuple):
    print '输出:'
    print arg1
    for var in vartuple:
        print var
    return

printinfoTwo(70, 60, 50)


'''
    匿名函数
    python使用lambda来创建匿名函数
    * lambda只是一个表达式,函数体比def简单很多
    * lambda的主体是一个表达式,而不是一个代码块。仅仅能在lamdba表达式中封装有限的逻辑进去。
    * lambda函数拥有自己的命令空间,并且不能访问自有参数列表之外或全局命名空间里的参数。
    * 虽然lambda函数看起来只能写一行,却不等同于c或c++的内敛函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率
'''

sum = lambda arg1, arg2: arg1 + arg2

print '相加后的值:', sum(10, 20)

'''
   return语句
   return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。
'''

def sumOne(arg1, arg2):
    total = arg1 + arg2
    print '函数内:', total
    return total

total = sumOne(10,20)
print '函数外:', total

'''
   变量作用域
   一个程序的所有的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的
   全局变量和局部变量
   定义在函数内部的变量拥有一个局部作用于,定义在函数外的拥有全局作作用域
   局部变量只能在其被声明的函数内部访问,而全局变量可以在整个范围内访问。
'''

total = 0 # 这个是全局变量

def sunThree(arg1, arg2):
    total = arg1 + arg2 # 这里是局部变量
    print '函数内是局部变量:', total
    return total

sunThree(10, 20)

print '函数外是全局变量:', total