在python编程中遇到的几个小知识点

chcp-windows命令

输入chcp命令会显示当前的活动代码页编号

C:\Users\xlgui>chcp
活动代码页: 936

# 文件1.txt使用的是utf-8编写, 此时出现乱码
C:\Users\xlgui>type 1.txt
hello world
浣犲ソ, 涓栫晫


------------------------------
这个就是因为代码页编号不匹配的原因

把当前窗口活动代码页设置为65001就可以了,65001就是utf-8,输入命令chcp 65001。
C:\Users\xlgui>chcp 65001
Active code page: 65001

C:\Users\xlgui>type 1.txt
hello world
你好, 世界

chcp说明

locals()内置函数

locals() 函数会以字典类型返回当前位置的全部局部变量。

>>>def f(arg):    # 两个局部变量:arg、z
...     z = 1
...     print (locals())
... 
>>> runoob(4)
{'z': 1, 'arg': 4}      # 返回一个名字/值对的字典

exec()内置函数

exec 执行储存在字符串或文件中的 Python 语句

exec(object[, globals[, locals]])
参数
object:必选参数,表示需要被指定的 Python 代码。
它必须是字符串或 code 对象。如果 object 是一个字符串,
该字符串会先被解析为一组 Python 语句,然后再执行(除非发生语法错误)。
如果 object 是一个 code 对象,那么它只是被简单的执行。

globals:可选参数,表示全局命名空间(存放全局变量),如果被提供,
则必须是一个字典对象。

locals:可选参数,表示当前局部命名空间(存放局部变量),
如果被提供,可以是任何映射对象。如果该参数被忽略,
那么它将会取与 globals 相同的值。

返回值
exec 返回值永远为 None>>>exec('print("Hello World")')
Hello World
# 单行语句字符串
>>> exec("print ('runoob.com')")
runoob.com
 
#  多行语句字符串
>>> exec ("""for i in range(5):
...     print ("iter time: %d" % i)
... """)
iter time: 0
iter time: 1
iter time: 2
iter time: 3
iter time: 4


---------------------------------------

x = 10
expr = """
z = 30
#print(x, y, z)
sum = x + y + z
print(sum)
"""
def func():
    y = 20
    exec(expr)
    exec(expr, {'x': 1, 'y': 2})
    exec(expr, {'x': 1, 'y': 2}, {'y': 3, 'z': 4})
    
func()


输出结果:
60
33
34

得出这些结果的原则: 就近原则
				先拿局部变量locals, 再拿全局变量globals
重点:
	并且如果提供了localsglobals, expr中的变量就不会再取外部的x=10了
例如
x=10
expr = """
z=30
print(x, y, z)
# s = x+y+z
# print(s)
"""

def f():
    y = 20
    exec(expr)
    exec(expr, {'a':1})
f()

直接报错 NameError: name 'x' is not defined

即如果为表达式expr提供了变量globalslocals, 
代码中的其它变量便与表达式expr再无瓜葛


	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值