- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章总结分析Python的5个硬核函数由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
对于想深入理解 Python 的朋友,很有必要认真看看。喜欢本文点赞支持,欢迎收藏学习.
计算指定表达式的值。也就是说它要执行的Python代码只能是单个运算表达式(注意eval不支持任意形式的赋值操作),而不能是复杂的代码逻辑,这一点和lambda表达式比较相似.
1
|
eval
(expression,
globals
=
None
,
locals
=
None
)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
x
=
10
def
func():
y
=
20
a
=
eval
(
'x + y'
)
print
(
'a: '
, a)
b
=
eval
(
'x + y'
, {
'x'
:
1
,
'y'
:
2
})
print
(
'b: '
, b)
c
=
eval
(
'x + y'
, {
'x'
:
1
,
'y'
:
2
}, {
'y'
:
3
,
'z'
:
4
})
print
(
'c: '
, c)
d
=
eval
(
'print(x, y)'
)
print
(
'd: '
, d)
func()
|
a: 30 b: 3 c: 4 10 20 d: None 。
动态执行Python代码。也就是说exec可以执行复杂的Python代码,而不像eval函数那么样只能计算一个表达式的值.
1
|
exec
(
object
[,
globals
[,
locals
]])
|
exec函数的返回值永远为None. 。
需要说明的是在Python 2中exec不是函数,而是一个内置语句(statement),但是Python 2中有一个execfile()函数。可以理解为Python 3把exec这个statement和execfile()函数的功能够整合到一个新的exec()函数中去了:
我们把实例1中的eval函数换成exec函数试试:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
x
=
10
def
func():
y
=
20
a
=
exec
(
'x + y'
)
print
(
'a: '
, a)
b
=
exec
(
'x + y'
, {
'x'
:
1
,
'y'
:
2
})
print
(
'b: '
, b)
c
=
exec
(
'x + y'
, {
'x'
:
1
,
'y'
:
2
}, {
'y'
:
3
,
'z'
:
4
})
print
(
'c: '
, c)
d
=
exec
(
'print(x, y)'
)
print
(
'd: '
, d)
func()
|
a: None b: None c: None 10 20 d: None 。
因为我们说过了,exec函数的返回值永远为None.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
x
=
10
expr
=
"""
z = 30
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 。
前两个输出跟上面解释的eval函数执行过程一样,不做过多解释。关于最后一个数字34,我们可以看出是:x = 1, y = 3是没有疑问的。关于z为什么还是30而不是4,这其实也很简单,我们只需要在理一下代码执行过程就可以了,其执行过程相当于:
1
2
3
4
5
6
7
8
9
10
11
12
|
x
=
1
y
=
2
def
func():
y
=
3
z
=
4
z
=
30
sum
=
x
+
y
+
z
print
(
sum
)
func()
|
先来看下这两个函数的定义和文档描述 。
1
|
globals
()
|
描述: Return a dictionary representing the current global symbol table. This is always the dictionary of the current module (inside a function or method, this is the module where it is defined, not the module from which it is called). 。
翻译: 返回一个表示当前全局标识符表的字典。这永远是当前模块的字典(在一个函数或方法内部,这是指定义该函数或方法的模块,而不是调用该函数或方法的模块) 。
1
|
locals
()
|
描述: Update and return a dictionary representing the current local symbol table. Free variables are returned by locals() when it is called in function blocks, but not in class blocks. 。
Note The contents of this dictionary should not be modified; changes may not affect the values of local and free variables used by the interpreter. 。
翻译: 更新并返回一个表示当前局部标识符表的字典。自由变量在函数内部被调用时,会被locals()函数返回;自由变量在类累不被调用时,不会被locals()函数返回.
注意: locals()返回的字典的内容不应该被改变;如果一定要改变,不应该影响被解释器使用的局部变量和自由变量.
1
2
3
4
5
6
7
8
9
10
11
|
name
=
'Tom'
age
=
18
def
func(x, y):
sum
=
x
+
y
_G
=
globals
()
_L
=
locals
()
print
(
id
(_G),
type
(_G), _G)
print
(
id
(_L),
type
(_L), _L)
func(
10
,
20
)
|
2131520814344 <class 'dict'> {'__builtins__': <module 'builtins' (built-in)>, 'func': <function func at 0x000001F048C5E048>, '__doc__': None, '__file__': 'C:/Users/wader/PycharmProjects/LearnPython/day04/func5.py', '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001F048BF4C50>, '__spec__': None, 'age': 18, '__name__': '__main__', 'name': 'Tom', '__package__': None, '__cached__': None} 2131524302408 <class 'dict'> {'y': 20, 'x': 10, '_G': {'__builtins__': <module 'builtins' (built-in)>, 'func': <function func at 0x000001F048C5E048>, '__doc__': None, '__file__': 'C:/Users/wader/PycharmProjects/LearnPython/day04/func5.py', '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001F048BF4C50>, '__spec__': None, 'age': 18, '__name__': '__main__', 'name': 'Tom', '__package__': None, '__cached__': None}, 'sum': 30} 。
1
2
3
4
5
6
7
|
name
=
'Tom'
age
=
18
G
=
globals
()
L
=
locals
()
print
(
id
(G),
type
(G), G)
print
(
id
(L),
type
(L), L)
|
2494347312392 <class 'dict'> {'__file__': 'C:/Users/wader/PycharmProjects/LearnPython/day04/func5.py', '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000244C2E44C50>, 'name': 'Tom', '__spec__': None, '__builtins__': <module 'builtins' (built-in)>, '__cached__': None, 'L': {...}, '__package__': None, '__name__': '__main__', 'G': {...}, '__doc__': None, 'age': 18} 2494347312392 <class 'dict'> {'__file__': 'C:/Users/wader/PycharmProjects/LearnPython/day04/func5.py', '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000244C2E44C50>, 'name': 'Tom', '__spec__': None, '__builtins__': <module 'builtins' (built-in)>, '__cached__': None, 'L': {...}, '__package__': None, '__name__': '__main__', 'G': {...}, '__doc__': None, 'age': 18} 。
上面打印出的G和L的内存地址是一样的,说明在模块级别locals()的返回值和globals()的返回值是相同的.
将source编译为code对象或AST对象。code对象能够通过exec()函数来执行或者通过eval()函数进行计算求值.
1
|
compile
(source, filename, mode[, flags[, dont_inherit]])
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
s
=
"""
for x in range(10):
print(x, end='')
print()
"""
code_exec
=
compile
(s,
'<string>'
,
'exec'
)
code_eval
=
compile
(
'10 + 20'
,
'<string>'
,
'eval'
)
code_single
=
compile
(
'name = input("Input Your Name: ")'
,
'<string>'
,
'single'
)
a
=
exec
(code_exec)
b
=
eval
(code_eval)
c
=
exec
(code_single)
d
=
eval
(code_single)
print
(
'a: '
, a)
print
(
'b: '
, b)
print
(
'c: '
, c)
print
(
'name: '
, name)
print
(
'd: '
, d)
print
(
'name; '
, name)
|
0123456789 Input Your Name: Tom Input Your Name: Jerry a: None b: 30 c: None name: Jerry d: None name; Jerry 。
comiple()函数、globals()函数、locals()函数的返回结果可以当作eval()函数与exec()函数的参数使用.
另外,我们可以通过判断globals()函数的返回值中是否包含某个key来判断,某个全局变量是否已经存在(被定义).
欢迎转载、收藏、有所收获点赞支持一下! 。
到此这篇关于总结分析Python的5个硬核函数的文章就介绍到这了,更多相关Python 函数内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://blog.csdn.net/weixin_38037405/article/details/121411240 。
最后此篇关于总结分析Python的5个硬核函数的文章就讲到这里了,如果你想了解更多关于总结分析Python的5个硬核函数的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我使用 4 核 i7 CPU(8 个逻辑核),debian linux 虚拟机也是 debian linux 程序使用 gcc 编译,没有进行特殊优化(默认编译设置) 我循环了该程序 1000 次。当
我有一个实时 linux 桌面应用程序(用 C 语言编写),我们正在移植到 ARM(4 核 Cortex v8-A72 CPU)。在架构上,它结合了高优先级显式 pthread(其中 6 个)和一对
我已经在 Digital Ocean ubuntu 实例上安装了 Solr 6: install_solr_service.sh solr-6.1.0.tgz 并验证 Solr 正在运行。但是,我无法
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 6年前关闭。 Improve this questi
我有一个大约 2000 维的特征向量。都是直方图特征。 我不知道在我的情况下哪个有效:将 SVM 与 RBF 核或卡方核应用? 你能建议我在我的情况下有效的内核吗? 最佳答案 一般来说,卡方和交集内核
我们有一台 12 核 MacPro 来进行一些蒙特卡罗计算。其 Intel Xeon 处理器启用了超线程 (HT),因此实际上应该有 24 个进程并行运行才能充分利用它们。然而,我们的计算在 12x1
所以这段代码: library(plyr) library(doMC) registerDoMC(cores=2) x=1:100 llply(x, some_function, .parallel=
Netty Server 流到 Netty 客户端(点对点,1 对 1): 好的 案例:Server和Client都是12 cores , 1Gbit NIC => 以每秒 300K 200 字节消息
我对以下 C# 代码的线程激活顺序感到困惑。它创建了 10 个线程,随机启动它们,每个线程模拟执行一个耗时的工作 10 次,如果你检查调试输出,线程似乎不是随机选择的,请看下面的输出示例,注意线程 #
这是我考试时提出的问题。我给出了以下答案,我的得分是0分。教授甚至不同意给予任何部分的认可,也没有告诉我我的答案有什么问题。谁能帮我找出我的答案有什么问题吗? 这是我在考试中给出的答案。缺点是:1)
我有一个 Intel Xeon E5-2620,它有 24 个 CPU。我写了一个应用程序,它创建 24 个线程来使用 openssl 解密 AES。当我在 100 万数据解密时将线程数从 1 增加到
我正在开发一个在图层上绘画的应用程序。这是一个示例代码,展示了我的绘画方式。 UIImageView * currentLayer = // getting the right layer... UI
在带有 2Tb DRAM 的 80 核 (160HT) nehalem 架构上运行一些测试后,我遇到了一个小的 HPC 问题: 当每个线程开始请求有关“错误”套接字上的对象的信息时,具有 2 个以上套
由于潜在的性能问题,我刚刚将测试实例从小型“标准”(1 核,1.75GB RAM)实例升级到中型“标准”实例(2 核,3.5GB RAM),这似乎是快速击中。我们确实存在应用程序池回收和必须重新预热某
我知道,为了在 Android 中保持响应式界面,繁重的工作必须在独立线程中完成。我很清楚如何实现这一点(通过使用 AsynTask...等),这不是问题的重点,只是让每个人都知道。 但是我已经在一个
我写了一个简单的多线程 Java 应用程序,主要方法只创建 5k 个线程,每个线程将循环处理一个包含 5M 条记录的列表。 我的机器规范: CPU 内核:12 个内核 内存:13Gb RAM 操作系统
让我们假设我们有固定数量的计算工作,没有阻塞、 sleep 、I/O 等待。工作可以很好地并行化——它由 100M 小而独立的计算任务组成。 什么是 4 核 CPU 的速度更快 - 运行 4 个线程或
我正在使用 WEKA/LibSVM 来训练术语提取系统的分类器。我的数据不是线性可分的,因此我使用 RBF 内核而不是线性内核。 我关注了guide from Hsu et al.并迭代 c 和 ga
谁能告诉我为什么在具有四个 ARMv7 处理器的 Jetson TK1 上调用 Python 的 multiprocessing.cpu_count() 函数会返回 1? >>> import mul
我是一名优秀的程序员,十分优秀!