了解更多的Python相关知识可以访问我的网站
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
点击此处跳转我的网站
dict()
作用:用来创建字典
dict1 = dict() # 传一个空字典
print(dict1)
dict2 = dict({1: "登录", 2: "退出"}) # 传一个字典
print(dict2)
dict3 = dict(x=1, y=2) # 传关键字
print(dict3)
dict4 = dict([(1, "登录"), (2, "退出")]) # 传一个包含一个或多个元祖的列表
print(dict4)
dict5 = dict(zip([1, 2], ["登录", "退出"])) # 传一个zip()函数
print(dict5)
输出结果:
{}
{1: '登录', 2: '退出'}
{'x': 1, 'y': 2}
{1: '登录', 2: '退出'}
{1: '登录', 2: '退出'}
dir()
作用:
找到模块内定义的所有名称。以一个字符串列表的形式返回。
-
如果对象是模块对象,则列表包含模块的属性名称。
-
如果对象是类型或类对象,则列表包含它们的属性名称,并且递归查找所有基类的属性。
-
否则,列表包含对象的属性名称,它的类属性名称,并且递归查找它的类的所有基类的属性。
1. 直接调用
import sys
print(dir())
return:
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'sys']
2. 传参某个模块
import sys
print(dir(sys))
return:
['__breakpointhook__', '__displayhook__', '__doc__', '__excepthook__', '__interactivehook__', '__loader__', '__name__', '__package__', '__spec__', '__stderr__', '__stdin__', '__stdout__', '__unraisablehook__', '_base_executable', '_clear_type_cache', '_current_frames', '_debugmallocstats', '_enablelegacywindowsfsencoding', '_framework', '_getframe', '_git', '_home', '_xoptions', 'addaudithook', 'api_version', 'argv', 'audit', 'base_exec_prefix', 'base_prefix', 'breakpointhook', 'builtin_module_names', 'byteorder', 'call_tracing', 'copyright', 'displayhook', 'dllhandle', 'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'float_repr_style', 'get_asyncgen_hooks', 'get_coroutine_origin_tracking_depth', 'getallocatedblocks', 'getdefaultencoding', 'getfilesystemencodeerrors', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'getswitchinterval', 'gettrace', 'getwindowsversion', 'hash_info', 'hexversion', 'implementation', 'int_info', 'intern', 'is_finalizing', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'platlibdir', 'prefix', 'pycache_prefix', 'set_asyncgen_hooks', 'set_coroutine_origin_tracking_depth', 'setprofile', 'setrecursionlimit', 'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout', 'thread_info', 'unraisablehook', 'version', 'version_info', 'warnoptions', 'winver']
可以看到其中包括了所有的sys可调用的方法,如sys.path,sys.exit等
3. 传某个实例化的类
class Shape:
def __dir__(self):
return ['area', 'perimeter', 'location']
s = Shape()
print(dir(s))
return: ['area', 'location', 'perimeter']
如果: 类中不带__dir__函数,那么
class Shape:
# def __dir__(self):
# return ['area', 'perimeter', 'location']
def add(self):
return 3
s = Shape()
print(dir(s))
给出的是类的方法
return: ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'add']
divmod()
- 中文说明:divmod(a,b)方法返回的是a//b(商)以及a%b(余数),返回结果类型为tuple
例:
a = 25
b = 3
print(divmod(a, b))
结果:
(8, 1)
enumerate()
- enumerate()用于将一个可遍历的数据对象(如列表、元组或字符串等)组合为一个索引序列,同时列出数据和数据下标,多用于for循环
源码欣赏:
def enumerate(sequence, start=0):
n = start
for elem in sequence:
yield n, elem
n += 1
语法:
enumerate(a,start)
a是可迭代对象,start是计数起始数字
li = ["a", "b", "c", "d", "e", "f"]
for i, j in enumerate(li):
print({i: j})
结果:
{0: 'a'}
{1: 'b'}
{2: 'c'}
{3: 'd'}
{4: 'e'}
{5: 'f'}
li = ["a", "b", "c", "d", "e", "f"]
for i in enumerate(li, 1):
print(i)
结果:
下标从1开始计数
(1, 'a')
(2, 'b')
(3, 'c')
(4, 'd')
(5, 'e')
(6, 'f')
eval()
作用:相当于去皮,使用果肉
使用场景介绍:
First:
a=10;
print(eval("a+1"))
结果:11
在这种情况下,后两个参数省略了,所以eval中的a是前面的10。对于eval,它会将第一个expression字符串参数的引号去掉,然后对引号中的式子进行解析和计算。
Second:
a=10;
g={'a':4}
print(eval("a+1",g))
结果:5
在这次的代码中,我们在 eval中提供了globals参数,这时候eval的作用域就是g指定的这个字典了,也就是外面的a=10被屏蔽掉了,eval是看不见的,所以使用了a为4的值。
Third:
a=10
b=20
c=30
g={'a':6,'b':8}
t={'b':100,'c':10}
print(eval('a+b+c',g,t))
结果:116
此次执行的结果中,a是6,b是100,c是10。我们首先来看一下,对于a为6我们是没有疑问的,因为在上个例子中已经说了,g会屏蔽程序中的全局变量的,而这里最主要的是为什么b是100呢?还记得我们在参数介绍的时候说过,当locals和globals起冲突时,locals是起决定作用的,这在很多编程语言里都是一样的,是作用域的覆盖问题,当前指定的小的作用域会覆盖以前大的作用域,这可以理解为一张小的纸盖在了一张大的纸上,纸是透明的,上面写的东西是不透明的,而它们重合的地方就可以理解成两个作用域冲突的地方,自然是小的显现出来了。
参考地址: https://blog.youkuaiyun.com/qq_29883591/article/details/53443062
exec()
-
exec()函数能执行储存在字符串或文件中的 Python 语句,相比于 eval()函数,exec可以执行更复杂的 Python 代码。
-
语法:exec(object[, globals[, locals]])
-
返回值为None
object — 必选,表示需要被指定的Python代码。它必须是字符串或代码对象。如果object是一个字符串,该字符串会先被解析为一组Python语句,然后在执行(除非发生语法错误)。如果object是一个代码对象,那么它只是被简单的执行。
globals — 可选,表示全局命名空间(存放全局变量),如果被提供,则必须是一个字典对象。
locals — 可选,表示当前局部命名空间(存放局部变量),如果被提供,可以是任何映射对象。如果该参数被忽略,那么它将会取与globals相同的值。
exec ('print("你好,深圳!")') # 单行语句字符串
# 多行语句字符串
exec ("""
def sum(a,b):
return a+b
print("a+b=%s"%sum(10,20))
""")
结果:
你好,深圳!
a+b=30
总结
-
1、exec函数执行的是python语句,没有返回值,eval函数执行的是python表达式,有返回值;
-
2、exec函数和eval函数都可以传入命名空间作为参数,实际上,可以向exec函数和eval函数提供两个命名空间,他们的函数定义为:
exec(source, globals=None, locals=None)
eval(source, globals=None, locals=None)
其中globals和locals都是可选参数,globals表示全局命名空间,必须是字典,locals表示局部命名空间,可以是任何映射。 -
3、需要注意的是,exec函数和eval函数都是将用户提供的字符串作为代码执行,将无法控制代码的行为,会带来严重的安全隐患,使用的时候要慎重。
filter(function, iterable)
官方说法:用 iterable 中函数 function 返回真的那些元素,构建一个新的迭代器。
terable 可以是一个序列,一个支持迭代的容器,或一个迭代器。如果 function 是 None ,则会假设它是一个身份函数,即 iterable 中所有返回假的元素会被移除。
def is_odd(n):
return n % 2 == 1
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(f'odd:{list(newlist)}')
结果:odd:[1, 3, 5, 7, 9]