Skr-Eric的Python课堂(十二)——Python的作用域

全局变量和局部变量

  局部变量:

    定义在函数内部的变量称为局部变量(函数的形参也是局部变量)

    局部变量只能在函数内部使用

    局部变量在函数调用时才能被创建,在函数调用之后会自动销毁

  全局变量

    定义在函数外部,模块内部的变量称为全局变量

    全局变量所有函数都可以直接访问(但函数内部不能将其赋值)

  示例:

# 此示例示意全局变量和局部变量
a = 100  # 全局变量
b = 200  # 全局变量

def fx(c):  # c是局部变量
    d = 400  # d是局部变量
    print(a, b, c, d)

fx(300)
print(a, b)

 

  说明:

    1. 局部变量只能在其被声明的函数内部访问,而全局变量可以在整个模块范围内访问

    2. 在函数内部赋值语句不会对全局变量造成影响

 

示例:

L = []
def input_number():
    L2 = []
    while True:
        n = int(input("请输入正整数"))  # 1 2 3 4
        if n < 0:
            break
        L2.append(n)
    L = L2
input_number()
print(L)

 

globals() / locals() 函数

  globals()  返回当前全局作用域内变量的字典

  locals()  返回当前局部作用内变量的字典

示例:

def fn_outter():
    print("fn_outter() 被调用")
    def fn_inner():
        print("fn_inner 被调用")

    fn_inner()  # 调用嵌套函数fn_nner
    fn_inner()  # 第二次调用
    print('fn_outter() 调用结束')

fn_outter()  # 调用外层函数

 

函数变量:

  函数名是变量,它在创建函数时绑定一个函数

    示例:

# 此示例示意函数名fn是变量.它绑定一个函数对象
def fn():
    print("hello world!")

f1 = fn
print(fn)  # <function fn at 0x7f0df513bf28>
print(f1)  # <function fn at 0x7f0df513bf28>
print(f1())  # None

def f1():
    print("函数f1被调用")

def f2():
    print('函数f2被调用')

f1, f2 = f2, f1

f1()  # f2被调用
f2()  # f1被调用

 

  一个函数可以作为另一个函数的实参传递

    示例:

# 此示例示意一个函数可以作为别一个函数的实参传入另一个函数中
def f1():
    print("hello f1")

def f2():
    print('hello f2')

def fx(fn):
    print(fn)  # < function f1 at 0xXXXXXXX>
    fn()  # 调用fn绑定的函数

fx(f1)  # 请问是如何执行的?
fx(f2)

 

    看懂下面的代码在干什么:

def myinput(fn):
    L = [1, 3, 5, 7, 9]
    return fn(L)

print(myinput(max))  # 9
print(myinput(min))  # 1
print(myinput(sum))  # 25

 

  函数可以返回另一个函数

    示例:

def get_function():
    s = input("请输入您要做的操作: ")
    if s == '求最大':
        return max
    elif s == '求最小':
        return min
    elif s == '求和':
        return sum

L = [2, 4, 6, 8, 10]
f = get_function()  # 让get_function返回给我们一个函数
print(f(L))

 

python3的四个作用域

  作用域也叫名字空间,是访问变量时查找变量名的范围空间

 

python的四个作用域 LEGB

  作用域                                   英文解释                                  英文简写

 局部作用域(函数内)              Local(function)                        L

 外部嵌套函数作用域             Enclosing function locals     E

 函数定义所在模块作用域     Global(module)                      G

 python内置模块的作用域      Builtin(Python)                       B

 

示例:

v = 100  # 全局

def fun1():
    v = 200  # 外部嵌套函数作用域
    print("fun1.v=", v)

    def fun2():
        v = 300  # 局作用域
        print('fun2.v=', v)
    fun2()  # 调用fun2

fun1()
print("全局变量v=", v)

 

变量名查找规则:

  在访问变量时,先查找本地变量,然后是包裹此函数外部的函数内的变量,之后是全局变量,最后是内建作用域内的变量

    即: L  --->   E   --->   G ----> B

  在默认情况下,变量名赋值会在当前作用域内创建变量和修改变量

 

global 语句

  作用:

    告诉解释执行器,global语句声明的一个或多个变量,这些变量的作用域为模块级的作用域,也称作全局作用域

    全局声明 global 将赋值变量映射到模块文件内部的作用域

  语法:

    global 变量名1, 变量名2, ...

  示例:

v = 100

def fn():
    global v  # 告诉解释执行器python3, v是全局变量,不是局部变量
    v = 200

fn()
print('v=', v)  # 200

  说明:

    1. 全局变量如果要在函数内部被赋值,则必须经过全局声明(否则会被认为是局部变量)

    2. 全局变量在函数内部不经过声明就可以直接访问

    3.不能先声明局部变量,再用global声明为全局变量,此做法不附合规则

    4. global变量列表里的变量名不能出现在函数的形参列表里

 

nonlocal语句

  作用:

    告诉解释执行器,nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量

  语法:

    nonlocal 变量名1, 变量名2, ....

  示例:

v = 100
def f1():
    v = 200
    print("f1.v=", v)

    def f2():
        nonlocal v
        v = 300
        print("f2.v=", v)
    f2()
    print("调用f2()后的f1.v = ", v)
f1()
print("全局的v=", v)

 

  说明:

    1. nonlocal 语句只能在被嵌套函数的内部进行使用

    2. 对nonlocal变量进行赋值操作,将对外部嵌套函数作用域内的变量进行操作

    3. 当有两层或两层以上函数嵌套时,访问nonlocal变量只对最近一层变量进行操作

    4. nonlocal语句的变量列表里的变量名,不能出现在此函数形参列表中

 

今天没有作业~吼吼吼~

 

 

想要看更多的课程请微信关注SkrEric的编程课堂

### 回答1: 可以!一般来说,Python 写小游戏最简单的方式就是使用 Pygame 库,它可以让你创建出有趣的游戏程序。如果你想更深入地学习,可以参考 Python 官方文档中的教程,也可以看一些其他的书籍或教程。 ### 回答2: 好的,我来为您介绍一个简单的Python小游戏——猜数字游戏。 猜数字游戏是一个经典的游戏,在这个游戏中,计算机会随机生成一个数字,玩家需要不断猜测这个数字是多少,直到猜中为止。下面是一个Python实现的示例代码: ```python import random def guess_number(target): guess = None count = 0 while guess != target: guess = input("请输入一个数字:") guess = int(guess) count += 1 if guess < target: print("猜小了,请再试试!") elif guess > target: print("猜大了,请再试试!") else: print("恭喜你,猜对了!你总共猜了{}次。".format(count)) if __name__ == '__main__': target = random.randint(1, 100) guess_number(target) ``` 在这个代码中,我们首先使用`import random`引入random模块,以便随机生成待猜的数字。 在`guess_number`函数中,我们使用一个`while`循环,不断提示玩家输入数字,并将其转换为整数类型。然后与目标数字进行比较,根据猜测的结果提示玩家继续猜测。 当玩家猜中目标数字时,会输出恭喜信息以及玩家猜测的次数。 最后在`if __name__ == '__main__':`部分,我们使用`random.randint(1, 100)`生成1至100之间的随机整数作为目标数字,并调用`guess_number`函数开始游戏。 希望这个简单的示例能帮助您了解如何使用Python编写一个小游戏! ### 回答3: Python是一种广泛应用于软件开发和数据分析的编程语言,也可以用来编写小游戏。以下是一个简单的Python小游戏示例: ```python import random def guess_number(): target = random.randint(1, 100) guess = 0 num_attempts = 0 print("欢迎参加猜数字游戏!") while guess != target: guess = int(input("请输入一个猜测的数字:")) num_attempts += 1 if guess < target: print("猜测的数字太小了!") elif guess > target: print("猜测的数字太大了!") print(f"恭喜你猜对了!你一共猜了{num_attempts}次。") guess_number() ``` 这个小游戏是一个猜数字游戏,程序会随机生成一个1到100之间的数字,玩家需要通过输入数字进行猜测,直到猜对为止。程序会根据玩家的猜测提示猜测的数字是太大还是太小。最后,程序会告诉玩家猜对了,并显示玩家一共猜了多少次。 这只是一个简单示例,你可以根据自己的兴趣和创造力编写更复杂的小游戏。Python的易学易用使其成为编写小游戏的理想选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值