函数:
语法:
def <function name> (<formal parameters>):
''' or """
explain what type arguments should have, and what your function is going to return.
''' or """
<function body>
返回None 或者 指定值
a simple example:
def max(x,y):
'''
x: int or float y: int or float return max(x,y)
'''
if x>y:
return x
else:
return y
局部变量:在函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用
全局变量:在一个文件顶部定义的变量可以供该文件中任意函数调用
总结:
1.内部函数,不修改全局变量可以访问全局变量
2.内部函数,修改同名全局变量,则python会认为它是一个局部变量
3.在内部函数修改同名全局变量之前调用变量名称(sum = sum +1),则引发Unbound-LocalError
在程序中设置的sum属于全局变量,而在函数中没有sum的定义,根据python访问局部变量和全局变量的规则:当搜索一个变量的时候,python先从局部作用域开始搜索,如果在局部作用域没有找到那个变量,那样python就在全局变量中找这个变量,如果找不到抛出异常(NAMEERROR或者Unbound-LocalError,这取决于python版本。)
如果内部函数有引用外部函数的同名变量或者全局变量,并且对这个变量有修改.那么python会认为它是一个局部变量,又因为函数中没有sum的定义和赋值,所以报错。
1优先读取局部变量,能读取全局变量,但如果调用了全局变量 又对他进行修改 则会引发error
a = 1
def change():
a +=1
print('a= '+str(a))
change()
print('a='+str(a))
输出:error
但如果在函数里加了个global a 的申明 那么就不会报错
a = 1
def change():
global a
a +=1
print('a= '+str(a))
change()
print('a='+str(a))
输出:a = 2
a = 2
在内部函数,修改同名全局变量,则python会认为它是一个局部变量
a = 1
def change():
a = 2
print('a= '+str(a))
change()
print('a='+str(a))
这里输出: a=2
a=1
但如果这样 就又会报错 因为你先调用了a 而且函数的输入也没a 那么函数认为函数里的这个a 是个全局变量,而全局变量在没有global a 申明的时候 你修改了他就会报错
a = 1
def change():
print('a= '+str(a))
a = 2
change()
print('a='+str(a))
x = 12
def g(x):
x = x + 1
def h(y):
return x + y
return h(6)
print(g(x))
输出: 19 说明:优先读取局部变量, 一级一级往上找。
引入py文件
可以用py文件装载具有某种共性的一系列函数
1 import X
在使用X.py中的函数x(y)时,要写:
X.x(y)
- 1
2 form X import *
在使用X.py中的函数x(y)时,要写:
x(y)
http://www.greenteapress.com/thinkpython/html/thinkpython009.html#toc93 关于string的相关描述 网址