python学习之函数(三)--函数与过程

1.函数与过程的区别:

有返回值的是函数,没有返回值的是过程;

函数(function):有返回值

过程(procedure):简单特殊,没有返回值

严格来说,python只有函数,没有过程。没有返回值的函数,默认有一个返回值none

2.返回值:

返回值可以是多种类型,也可以返回多个数据,可以用数组打包返回,也可以用元组一起返回,没有类型限制

3.函数变量的作用域:

局部变量(local variable):在函数中定义的参数和变量是局部变量,在函数外是无法使用的,因为函数调用完之后,栈就将函数数据清除,所以外部是无法调用的

全局变量(global variable):作用域是整个模块,整个代码都可以访问,可以在函数中使用,最好不要在函数中修改,如果在函数中修改全局变量,会在函数中,新建一个局部变量,名字和全局变量一致,但是不会影线全局变量的值

def decision(price,rate):

final_price = price * rate
old_price = 70
return final_price

old_price = float(input("输入原价:"))
rate = float(input("输入折扣:"))
print(old_price)
print("折扣价格:",decision(old_price,rate)

4.global关键字:可以用来修改成全局变量

count = 5
def test1():
count = 10
print(count)
print(count

5.内嵌函数:在函数内部定义另一个函数;

def fun1():
print("fun1()正在被调用")
def fun2():
print("fun2()正在被调用")
fun2()
fun1()
fun2()
执行结果:
fun1()正在被调用
fun2()正在被调用
Traceback (most recent call last):
  File "/Users/zoezhang/PycharmProjects/learnpython/learn-内嵌函数.py", line 8, in <module>
    fun2()
NameError: name 'fun2' is not defined

注意:内嵌函数在调用的时候,只能在定义函数的内部能调用,不能全局调用

5.闭包():如果在一个内部函数里,对外部作用域(但不是在全局作用域)里进行引用,则内部函数就被认为是闭包

注意:闭包是由内嵌函数演变而来,全局是不能调用闭包的

#闭包
def funx(x):
def funy(y):
return x*y
return funy
#调用方法一
print(funx(1)(2))
#调用方法二
i=funx(8)
print(i(5))

在python3之前,内部函数是不能直接更改全局变量的,会报错,需要间接使用容器类型来解决,因为容器类型不是存储在栈里,所以可以使用,更改方式如下:
#----------------
def fun1():
x=[2]
def fun2():
x[0] *= x[0]
return x[0]
return fun2()
print(fun1())
在python3之后,增加一个关键字nonlocal(同类型函数关键字glocal)
#----------
def fun1():
x=4
def fun2():
nonlocal x
x*=x
return x
return fun2()
print(fun1())

global适用于函数内部修改全局变量的值; nonlocal适用于嵌套函数中内部函数修改外部变量的值

如果没有使用以上关键字,对全局变量或者外部变量进行修改,python会默认将全局变量隐藏起来


 



 

 
posted @ 2018-06-13 18:08  Zoeya  阅读(1353)  评论(0编辑  收藏  举报