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.csdn.net/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]