推荐一个大神的人工智能教程!http://blog.youkuaiyun.com/jiangjunshow
1,def是Python中的一个可执行语句——函数并不存在,直到Python运行了def后才存在。def创建了一个对象,并将其赋值给一个变量名,这个变量名就是函数名。def可以出现在任一语句可以出现的地方——甚至是嵌套在其他语句中。例如:
-
def times(x,y):
-
return x*y
-
-
print times(
2,
3)
-
print times(
'mathboy',
3)
结果为:
-
6
-
mathboymathboymathboy
2,def定义的变量只能在def内被使用,不能再函数外部被使用。一个在def之外被赋值的变量X与一个在def内被赋值的变量X是完全不同的两个变量。
3,Python变量可以分为本地(def内部,除非用global声明)、全局(模块内部)、内置(预定义的__builtin__模块)。全局声明global会将变量名映射到模块文件内部的作用域。变量名的引用将依次查找本地、全局、内置变量。例如:
-
X =
99
-
-
def add(Y):
-
Z = X + Y
-
return Z
-
-
print add(
1)
结果为:
100
4,global语句用于声明一个或多个全局变量。例如:
-
X =
88
-
def func():
-
global X
-
X =
99
-
-
func()
-
print X
输出结果为:
99
再例如:
-
y,z =
1,
2
-
-
def func():
-
global x
-
x = y + z
-
-
func()
-
print x,y,z
结果为:
3 1 2
5,导入一个模块后,该模块的全局变量就成为该模块对象的属性。文件间通信,不要这样做:
-
# first.py
-
X =
99
-
-
# second.py
-
import first
-
first.X =
88
而应该这样做:
-
# first.py
-
X =
99
-
-
def setX(new):
-
global X
-
X = new
-
-
# second.py
-
import first
-
first.setX(
88)
6,函数是可以嵌套的。例如:
-
def f1():
-
x =
88
-
def f2():
-
print x
-
f2()
-
-
f1()
结果为:
88
7,函数嵌套可以用于实现工厂函数。例如:
-
def maker(M):
-
def action(X):
-
return X**M
-
-
return action
-
-
f = maker(
3)
-
print f(
2)
输出结果为:
8
8,函数可以有默认参数。例如:
-
def fun(a,b=3):
-
return a+b
-
-
print fun(
1,
2)
-
print fun(
2)
结果为:
-
3
-
5
9,def中还可以使用lambda表达式。例如:
-
def func():
-
x =
4
-
action = (
lambda n: x**n)
-
return action
-
-
f = func()
-
print f(
3)
输出结果为:
64
10,Python函数中,不可变参数(例如数字和字符串)是“通过值”进行传递的,可变对象(例如列表和字典)是通过“指针”进行传递的。例如:
-
def func(a,b):
-
a =
1
-
b.append(
1)
-
-
x =
0
-
y = [
0]
-
func(x,y)
-
print x,y
结果为:
0 [0, 1]
11,Python函数的返回值可以有多个变量,相当于返回的是一个元组,只是圆括号()被省略了。例如:
-
def set(a,b):
-
a =
3.14
-
b = [
1,
2,
3]
-
return a,b
-
-
x =
6.28
-
y = [
4,
5,
6]
-
x,y = set(x,y)
-
print x
-
print y
输出结果为:
-
3.14
-
[
1,
2,
3]
12,Python支持关键字参数,所有基于位置的参数将首先按照从左到右的顺序匹配头部的参数,之后再进行基于变量名的关键字匹配。例如:
-
def fun(a,b,c):
-
print a,b,c
-
-
fun(
1,c=
3,b=
2)
-
fun(c=
3,a=
1,b=
2)
输出结果为:
-
1
2
3
-
1
2
3
13,默认参数和关键字参数可以一起使用。例如:
-
def fun(a,b=2,c=3):
-
print a,b,c
-
-
fun(
1,c=
4)
输出结果为:
1 2 4
14,Python还支持函数的任意参数。第一种方法是在元组中收集不匹配的任意参数。第二种方法是在字典中收集不匹配的关键字参数。例如:
-
def func(a, *pargs, **kargs):
-
print a
-
print pargs
-
print kargs
-
-
func(
1,
2,
3,x=
1,y=
2)
输出结果为:
-
1
-
(
2,
3)
-
{
'y':
2,
'x':
1}
15,在函数调用时也可以使用*语法,来分解参数的集合。例如:
-
def func(a,b,c,d):
-
print a,b,c,d
-
-
func(*(
1,
2,
3,
4))
-
func(
1,*(
2,
3),**{
'd':
4})
-
func(
1,c=
3,*(
2,),**{
'd':
4})
输出结果为:
-
1
2
3
4
-
1
2
3
4
-
1
2
3
4
推荐一个大神的人工智能教程!http://blog.youkuaiyun.com/jiangjunshow