设为首页 加入收藏

TOP

Python之路【第四篇】:Python基础之函数(三)
2019-08-15 00:10:20 】 浏览:503
Tags:Python 之路 四篇 :Python 基础 函数
me) huangwei()

def weihou():
    name = "陈卓"
    def weiweihou():
        global name
        name = "冷静"
    weiweihou()
    print(name)
print(name)
weihou()
print(name)

输出结果:

C:\Python35\python3.exe G:/python_s3/day15/全局变量与局部变量.py
刚娘
陈卓
冷静  

代码运行示例图:

使用nonlocal 指定上一级变量

name = "刚娘"
def weihou():
    name = "陈卓"
    def weiweihou():
        nonlocal name  #nonlocal,指定上一级变量
        name = "冷静"
    weiweihou()
    print(name)
print(name)
weihou()
print(name)

运行结果:
C:\Python35\python3.exe G:/python_s3/day15/全局变量与局部变量.py
刚娘
冷静
刚娘

四、递归

在函数内部,可以调用其他函数。如果一个函数在内部调用自身

def calc(n):
    print(n)
    if int(n/2) == 0:
        return n
    return calc(int(n/2))
calc(10)

输出结果:
C:\Python35\python3.exe G:/python_s3/day15/全局变量与局部变量.py
10
5
2
1
__author__ = 'zhurui'
import time

person_list=['zhurui','caiyunjie','yuanhao','simon','william','zcz']
def ask_way(person_list):
    print('-'*60)
    if len(person_list) == 0:
        return '没人知道'
    person=person_list.pop(0)
    if person == 'simon':
        return '%s说:我知道,东方财富网就在东方财富大厦A座,下肇嘉浜路地铁站就是' %person
    print('hi 美男[%s],敢问路在何方' % person)
    print('%s回答道:我不知道,但你慧眼识珠,我去帮你问问%s...' % (person,person_list) )
    time.sleep(3)
    res = ask_way(person_list)
    print('%s问的结果是: %res' %(person,res))
    return res

res = ask_way(person_list)
print(res)

 运行结果如下:

C:\Python35\python3.exe G:/python_s3/day15/全局变量与局部变量.py
------------------------------------------------------------
hi 美男[zhurui],敢问路在何方
zhurui回答道:我不知道,但你慧眼识珠,我去帮你问问['caiyunjie', 'yuanhao', 'simon', 'william', 'zcz']...
------------------------------------------------------------
hi 美男[caiyunjie],敢问路在何方
caiyunjie回答道:我不知道,但你慧眼识珠,我去帮你问问['yuanhao', 'simon', 'william', 'zcz']...
------------------------------------------------------------
hi 美男[yuanhao],敢问路在何方
yuanhao回答道:我不知道,但你慧眼识珠,我去帮你问问['simon', 'william', 'zcz']...
------------------------------------------------------------
yuanhao问的结果是: 'simon说:我知道,东方财富网就在东方财富大厦A座,下肇嘉浜路地铁站就是'es
caiyunjie问的结果是: 'simon说:我知道,东方财富网就在东方财富大厦A座,下肇嘉浜路地铁站就是'es
zhurui问的结果是: 'simon说:我知道,东方财富网就在东方财富大厦A座,下肇嘉浜路地铁站就是'es
simon说:我知道,东方财富网就在东方财富大厦A座,下肇嘉浜路地铁站就是

Process finished with exit code 0

递归特性:

1.必须有一个明确的结束条件

2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少

3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

 

 

 

五、作用域

示例代码如下:

#1、作用域即范围
        - 全局范围(内置名称空间与全局名称空间属于该范围):全局存活,全局有效
      - 局部范围(局部名称空间属于该范围):临时存活,局部有效 #2、作用域关系是在函数定义阶段就已经固定的,与函数的调用位置无关,如下 x = 1 def f1(): def f2(): print(x) return f2 x = 100 def f3(func): x=2 func() x = 10000 f3(f1()) 结果: C:\Python35\python3.exe G:/python_s3/day16/作用域.py 10000 #3、查看作用域:globals(),locals()  LEGB 代表名字查找顺序: locals -> enclosing function -> globals -> __builtins__ locals 是函数内的名字空间,包括局部变量和形参 enclosing 外部嵌套函数的名字空间(闭包中常见) globals 全局变量,函数定义所在模块的名字空间 builtins 内置模块的名字空间

 

六、匿名函数

代码如下:

#1、 代码方式一
def calc(x):
    return x+1 res = calc(10) print(res) 输出结果为: C:\Python35\python3.exe G:/python_s3/day16/匿名函数.py 11 #2、用lambda方式表达 print (lambda x:x+1) #代表单纯的输出内存地址 func=lambda x:x+1 print (func(10)) 输出结果为: <function <lambda> at 0x00000000006EE0D0> 11
#表达方式1
name
首页 上一页 1 2 3 4 5 下一页 尾页 3/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Ruby数组(2):数组方法详细整理 下一篇python 3.x 用户登录重设密码

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目