#def 定义函数

def是Python中的一个可执行语句 —— 函数并不存在,直到Python运行了def后才存在。 def创建了一个对象,并将其赋值给一个变量名,这个变量名就是函数名。 def可以出现在任一语句可以出现的地方——甚至是嵌套在其他语句中。

def 和 return 配合使用。

  1. def times(x,y):
  2. return x*y
  3. print (times(2,3))
  4. print (times('mathboy',3))
  5. #output________________
  6. 6
  7. mathboymathboymathboy

Python变量可以分为

  • 本地( def 内部,除非用 global 声明)

  • 全局(模块内部)

  • 内置(预定义的builtin模块)

全局声明global会将变量名映射到模块文件内部的作用域。

变量名的引用将依次查找本地、全局、内置变量。

  1. X = 99
  2. def add(Y):
  3. Z = X + Y
  4. return Z
  5. print add(1)
  6. #output________________
  7. 100

使用global全局声明:

  1. X = 88
  2. def func():
  3. global X #使用了global全局声明
  4. X = 99
  5. func() #想像一下,如果去掉 func()会如何呢?
  6. print (X)
  7. #output________________
  8. 99
  1. #print前去掉func()
  2. X = 88
  3. def func():
  4. global X
  5. X = 99
  6. print (X)
  7. #output________________
  8. 88
  1. y,z = 1,2
  2. def func():
  3. global x
  4. x = y + z
  5. func()
  6. print (x,y,z)
  7. #output________________
  8. 3 1 2
  9. #若print前去掉func(),output________________
  10. NameError: name 'x' is not defined

导入一个模块后,该模块的全局变量就成为该模块对象的属性。

文件间通信,不要这样做:

  1. # first.py
  2. X = 99
  3. # second.py
  4. import first
  5. first.X = 88

应该这样做

  1. # first.py
  2. X = 99
  3. def setX(new):
  4. global X
  5. X = new
  6. # second.py
  7. import first
  8. first.setX(88)

函数是可以嵌套的

  1. def f1():
  2. x = 88
  3. def f2():
  4. print (x)
  5. f2()
  6. f1()
  7. #output________________
  8. 88

函数可以有默认参数

  1. def fun(a, b=3):
  2. return a + b
  3. print(fun(1, 2))
  4. print(fun(2))
  5. #output________________
  6. 3
  7. 5
  8. #含义 只输一个变量,另一个就默认

def中还可以使用lambda表达式

  1. def func():
  2. x = 4
  3. action = (lambda n: x**n)
  4. return action
  5. f = func()
  6. print (f(3))
  7. #output________________
  8. 64

Lambda表达式是Python中一类特殊的定义函数的形式,使用它可以定义一个匿名函数。与其它语言不同,Python的Lambda表达式的函数体只能有唯一的一条语句,也就是返回值表达式语句。 ```python

下面是个Lambda表达式的例子:

li=[{“age”:20,”name”:”def”},{“age”:25,”name”:”abc”},{“age”:10,”name”:”ghi”}] li=sorted(li,key=lambda x:x[“age”]) print(li)

如果不用Lambda表达式,而要写成常规的函数,那么需要这么写

def comp(x): return x[“age”] li=[{“age”:20,”name”:”def”},{“age”:25,”name”:”abc”},{“age”:10,”name”:”ghi”}] li=sorted(li,key=comp) print(li)

  1. Python函数中,不可变参数(例如**数字和字符串**)是“通过值”进行传递的,可变对象(例如**列表和字典**)是通过“指针”进行传递的。
  2. ```python
  3. def func(a,b):
  4. a = 1
  5. b.append(1)
  6. x = 0
  7. y = [0]
  8. func(x,y)
  9. print x,y
  10. #output________________
  11. 0 [0, 1]

Python函数的返回值可以有多个变量,相当于返回的是一个元组,只是圆括号()被省略了。例如:

  1. def set(a,b):
  2. a = 3.14
  3. b = [1,2,3]
  4. return a,b
  5. x = 6.28
  6. y = [4,5,6]
  7. x,y = set(x,y)
  8. print x
  9. print y
  10. #output________________
  11. 3.14
  12. [1, 2, 3]

Python支持关键字参数,所有基于位置的参数将首先按照从左到右的顺序匹配头部的参数,之后再进行基于变量名的关键字匹配。例如:

  1. def fun(a,b,c):
  2. print a,b,c
  3. fun(1,c=3,b=2)
  4. fun(c=3,a=1,b=2)
  5. #output________________
  6. 1 2 3
  7. 1 2 3

之后的暂时看不懂


http://blog.csdn.net/mathboylinlin/article/details/9401407 原文链接