函数¶
基础¶
python函数:
如果一个Python函数、类方法或属性的名字以两个下划线开始(但不是结束), 它是私有的
类方法或者是私有 (只能在它们自已的类中使用) 或者是公有 (任何地方都可使用)
def <funName>(): #定义
... ...
<funName>() # 调用
实例1:
def func(x):
global y #全局变量
print 'x is', x #打印变量
x = 2 #修改变量
x = 50 #函数外修改
func(x) #执行函数
//——使用默认参数值::
def say(message, times = 1):
print message * times
say('Hello')
say('World', 5)
//实例3——ifelse、return語句::
def maximum(x, y):
if x > y:
return x
else:
return y
print maximum(2, 3)
DocStrings(文档字符串, 它通常被简称为 docstrings
, DocStrings是一个重要的工具, 由于它帮助你的程序文档更加简单易懂, 你应该尽量使用它):
def printMax(x, y):
'''Prints the maximum of two numbers.
The two values must be integers.''' # 文档字串
x = int(x) # convert to integers, if possible
y = int(y)
if x > y:
print x, 'is maximum'
else:
print y, 'is maximum'
printMax(3, 5)
print printMax.__doc__ #文档打印
变量作用域¶
全局变量global:
关键字: global
实例:
num = 1
def fun1():
global num # 需要使用 global 关键字声明
print(num) # 1
num = 123
print(num) # 123
fun1()
print(num) # 123
闭包:
是函数式编程的一个重要的语法结构,是一种特殊的内嵌函数。
如果在一个内部函数里对外层非全局作用域的变量进行引用,那么内部函数就被认为是闭包
通过闭包可以访问外层非全局作用域的变量,这个作用域称为 闭包作用域
闭包的返回值通常是函数。
实例:
def funX(x):
def funY(y):
return x * y
return funY
i = funX(8)
print(type(i)) # <class 'function'>
print(i(5)) # 40
全局变量nonlocal:
如果要修改闭包作用域中的变量则需要 nonlocal 关键字
def outer():
num = 10
def inner():
nonlocal num # nonlocal关键字声明
num = 100
print(num)
inner()
print(num)
outer()
# 100
# 100
Lambda 表达式¶
在 Python 里有两类函数:
第一类:用 def 关键词定义的正规函数
第二类:用 lambda 关键词定义的匿名函数
格式:
lambda argument_list: expression
说明:
lambda - 定义匿名函数的关键词。
argument_list - 函数参数
expression - 只是一个表达式
备注
expression 中没有 return 语句,因为 lambda 不需要它来返回,表达式本身结果就是返回值。匿名函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
可以这样认为,lambda 作为一个表达式,定义了一个匿名函数,如:
例:
g = lambda x:x+1
可看作:
def g(x):
return x+1
备注
lambda 定义了一个匿名函数。lambda 并不会带来程序运行效率的提高,只会使代码更简洁。
全局函数方便使用的,filter, map, reduce:
foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
print(filter(lambda x: x % 3 == 0, foo))
print(map(lambda x: x * 2 + 10, foo))
print(reduce(lambda x, y: x + y, foo))
实例:
def make_repeater(n):
return lambda s: s*n
twice = make_repeater(2)
print(twice('word'))