随笔 - 1762  文章 - 0  评论 - 109  阅读 - 431万

python学习笔记(一)

1.eval()函数:

eval是单词evaluate的缩写,就是:求...的值的意思。eval()函数的作用是把str转换成list,dict,tuple.

复制代码
li_1='[1,2,3]'
print(eval(li_1))
di_1="{'a':1,'b':3,'c':5}"
print(eval(di_1))
tu_1='(2,4,6)'
print(eval(tu_1))
'''
运行结果:
[1, 2, 3]
{'a': 1, 'b': 3, 'c': 5}
(2, 4, 6)
'''
View Code
复制代码

 

python中有很多内置的很有用的工具函数,熟练地使用这些小工具绝对可以帮助你在工作中达到事半功倍的效果,今天由于需要用到了eval()函数,这个函数其实之前就用过了但是由于最近一直忙于看论文和方向上的一些其他的事,这个东西也就慢慢忘掉了,今天要用,索性直接再学一下,这里就作为是学习的记录了。(https://blog.csdn.net/together_cz/article/details/72640276)

eval()官方文档里面给出来的功能解释是:将字符串string对象转化为有效的表达式参与求值运算返回计算结果

语法上:调用的是:eval(expression,globals=None, locals=None)返回的是计算结果

其中:

    expression是一个参与计算的python表达式

    globals是可选的参数,如果设置属性不为None的话,就必须是dictionary对象了

    locals也是一个可选的对象,如果设置属性不为None的话,可以是任何map对象了

 

python是用命名空间来记录变量的轨迹的,命名空间是一个dictionary,键是变量名,值是变量值。

当一行代码要使用变量 x 的值时,Python 会到所有可用的名字空间去查找变量,按照如下顺序:

1)局部名字空间 - 特指当前函数或类的方法。如果函数定义了一个局部变量 x, 或一个参数 x,Python 将使用它,然后停止搜索。

2)全局名字空间 - 特指当前的模块。如果模块定义了一个名为 x 的变量,函数或类,Python 将使用它然后停止搜索。

3)内置名字空间 - 对每个模块都是全局的。作为最后的尝试,Python 将假设 x 是内置函数或变量。

python的全局名字空间存储在一个叫globals()的dict对象中;局部名字空间存储在一个叫locals()的dict对象中。我们可以用print (locals())来查看该函数体内的所有变量名和变量值。

下面简单演示一下eval()函数的使用:

复制代码
import math
def eval_test():
    l = '[1,2,3,4,[5,6,7,8,9]]'
    d = "{'a':123,'b':456,'c':789}"
    t = '([1,3,5],[5,6,7,8,9],[123,456,789])'
    print('--------********---------转化开始-----------********---------')
    print(type(l), type(eval(l)))
    print(type(d), type(eval(d)))
    print(type(t), type(eval(t)))
    print(locals())
if __name__ == "__main__":
    eval_test()
'''
the running result:
--------********---------转化开始-----------********---------
<class 'str'> <class 'list'>
<class 'str'> <class 'dict'>
<class 'str'> <class 'tuple'>
{'t': '([1,3,5],[5,6,7,8,9],[123,456,789])', 'd': "{'a':123,'b':456,'c':789}", 'l': '[1,2,3,4,[5,6,7,8,9]]'}
'''
View Code
复制代码

 

上面简单演示的是eval在字符串对象和list、dictinoary、tuple对象之间的转换作用

 

众所周知:eval()的确是一个很便捷的工具,但是便捷使用不当的同时也会造成严重的安全问题。

2.浅拷贝与深拷贝:

浅拷贝是只拷贝父对象,深拷贝是父对象子对象一块拷贝。就像克隆一只羊D,浅拷贝是只克隆D,深拷贝是克隆了D,D的孩子也一并被克隆。

浅拷贝:

复制代码
import copy
a=[1,2,[3,4]]
print('a的引用:',id(a))
def test(m):
    print('m的引用:', id(m))
    print(m)
    b=copy.copy(m)
    b.append(50)
    b[2].append('hi')
    print(m)
    print(b)
test(a)
'''
a的引用: 43269128
m的引用: 43269128
[1, 2, [3, 4]]
[1, 2, [3, 4, 'hi']]
[1, 2, [3, 4, 'hi'], 50]
'''
View Code
复制代码

 

深拷贝:

复制代码
import copy
a=[10,20,[5,6]]
print('a的引用:',id(a))
def test(m):
    print('m的引用:', id(m))
    print(m)
    b=copy.deepcopy(m)
    b.append(30)
    b[2].append(7)
    print(m)
    print(b)
test(a)
'''
a的引用: 43531272
m的引用: 43531272
[10, 20, [5, 6]]
[10, 20, [5, 6]]
[10, 20, [5, 6, 7], 30]
'''
View Code
复制代码

 

posted on   一杯明月  阅读(262)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示