Python中eval()和input()的用法浅析

1. eval定义

eval(expression, globals=None, locals=None)

expression:该参数是一个字符串,python会使用globals字典和locals字典作为全局和局部的命名空间,将expression当做一个python表达式进行解析和计算。

globals:该参数管控的是一个全局的命名空间,也就是我们在计算表达式的时候可以使用全局的命名空间中的函数,如果这个参数被提供了,并且没有提供自定义的__builtins__,那么会将当前环境中的__builtins__拷贝到自己提供的globals里,然后才会进行计算。关于__builtins__,它是python的内建模块,也就是python自带的模块,不需要我们import就可以使用的,例如我们平时使用的int、str、abs等都在这个模块中。关于它的说明可以参照这篇文章:点击打开链接。如果globals没有被提供,则使用python的全局命名空间。

locals:该参数管控的是一个局部的命名空间,和globals类似,不过当它和globals中有重复的部分时,locals里的定义会覆盖掉globals中的,也就是当globals和locals中有冲突的部分时,locals说了算,它有决定权,以它的为准。如果locals没有被 提供的话,则默认为globals。

实际中添加不同参数的效果,见如下的实例演示:

>>>a, b, c = 1, 2, 3

>>>g = {'a': 5, 'b': 10}

>>>L = {'b': 50, 'c': 100}

>>>eval('a + b + c')   #直接将 a,b,c 三个值相加
Out[4]: 6

>>>eval('a + b', g)   #当加入参数g后,会覆盖之前变量a,b的值,并将g中的值赋给对应变量
Out[5]: 15

>>>eval('a + b + c', g)   #当前参与计算的变量必须都在g中,否则报错
Traceback (most recent call last):

  File "<ipython-input-5-100c5d3fb1b4>", line 1, in <module>
    eval('a + b + c', g)

  File "<string>", line 1, in <module>

NameError: name 'c' is not defined

>>> eval('a + b + c', g, L)  #当加入参数L后,会覆盖之前变量和g中变量值,并将L中的值赋给对应变量
Out[7]: 155

2. eval用法

eval(<字符串>) 能够以Python表达式的方式解析并执行字符串,并将返回结果输出。eval()函数将去掉字符串的两个引号,将其解释为一个变量。单引号,双引号,eval()函数都将其解释为int类型;三引号则解释为str类型。

>>>a = eval(10)   #非字符串
Traceback (most recent call last):

  File "<ipython-input-1-29db9f085529>", line 1, in <module>
    a = eval(10)

TypeError: eval() arg 1 must be a string, bytes or code object

>>>a = eval('10')   #单引号字符串
>>>a
Out[3]: 10
>>>type(a)
Out[4]: int

>>>b = eval("20")   #双引号字符串
>>>b
Out[6]: 20
>>>type(b)
Out[7]: int

>>>c = eval('"30"')   #三引号字符串
>>>c
Out[9]: '30'
>>>type(c)
Out[10]: str

3. input用法

在获得用户输入之前,input()函数可以包含一些提示性的文字,标准形式: <变量> = input( " 提示性的文字 " )

无论用户输入的是字符还是数字,input()函数统一按照字符串类型输出。因此input()的输出类型均是str。

在实际操作中,为了获得想要的类型,会采取一定的强制性转换措施,如下:

>>>a = input('请输入:')

请输入:56

>>>type(a)
Out[2]: str

>>>b = int(input('请输入:'))

请输入:64

>>>type(b)
Out[4]: int

>>>c = eval(input('请输入:'))

请输入:72

>>>type(c)
Out[6]: int

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值