python基础11_函数作用域_global_递归

看到了一个16进制转换的小知识点,就验证了一下运行结果.

#!/usr/bin/env python
# coding:utf-8

# 看到了16进制转换的问题。顺便验证一下。
a = 255
b = 1001
print(hex(a), hex(b))

c = 0xff
d = 0x3e9
print(int(c),int(d))

继续往前走, 学习一下global关键字

#!/usr/bin/env python
# coding:utf-8

name = "tom"  # 全局作用域


def chg_name():
    global name # 有关键字
    name = "jerry"  # 修改了全局的变量
    age = 38 #  局部作用域
    print('change_name', name,age)

# 如果函数内部没有global关键字,只能读取全局变量,无法对全局变量重新赋值.
# 但是对于可变类型,依然可对内部元素进行操作.

names =['toma','abc','kaka']

def qiuxin():
    names.append('meixi')
    print(names)

qiuxin()


def change_name():
    # name = "Anna"  #
    age = 18 #  局部作用域
    print(name,age)


# def change_name2():
#     name = "Anna"  #
#     age = 18 #  局部作用域
#     global name # 关键字需要放在局部的最上面.
#     print(name,age)


change_name()
chg_name()
print(name)

### 规则: 全局变量名全部大写, 局部变量小写

验证一下函数以及变量的作用域:

#!/usr/bin/env python
# coding:utf-8

# 函数的嵌套
def huangwei():
    name = "黄伟"
    print(name)

    def liuyang():
        name = "刘洋"
        print(name)

        def nuli():
            name = "沪上"
            print(name)

        print(name)
        nuli()

    liuyang()
    print(name)


huangwei()

## 以上代码将按照行号 4  23  7  8  20  11  12  18  19  15  16  21  的顺序执行


ename = "tom"


def wei():
    ename = "U"

    def suo():
        global ename  # 这里实际上拿到的是 tom
        ename = 'SA'

    suo()
    print(ename)  # 这里实际上是32行的U


print(ename)
wei()
print(ename)

与global作为对比的,有另一个关键字 nonlocal

#!/usr/bin/env python
# coding:utf-8

ename = "tom"


def wei():
    ename = "U"

    def suo():
        nonlocal ename  # 这回拿到的是上一级的
        ename = 'SA'

    suo()
    print(ename)  # 这里实际上是32行的U


print(ename)
wei()
print(ename)

风湿理论:  函数即变量 

来自:  http://www.cnblogs.com/linhaifeng/articles/6113086.html#label1

#!/usr/bin/env python
# coding:utf-8

### 递归好比问路
# 递归效率不高,

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

calc(10)

猜你喜欢

转载自www.cnblogs.com/frx9527/p/python_11.html