#!/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