【python3学习记录】函数

不容易记住的内置函数整理

1. all()和any(),all判断 可迭代参数 所有元素是否为True,如果是返回True否则返回 False。 any则是有一个为True返回True,参数元素全为False,返回False。他们的区别如同他们的名字一样。

2. bin() 全名 binary,将 int 或者 long int 转换为二进制。

>>> bin(10)
'0b1010'

3.bytes() 返回 新的 bytes对象,对象是一个0 <= x < 256区间内的整数 不可变序列。 bytearray() 与 bytes() 相似但是转为 可变序列

>>> bytes([65, 66])
b'AB'

4. classmethod修饰符,修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等。借用菜鸟教程的例子一下看懂[1]

class A(object):

    # 属性默认为类属性(可以给直接被类本身调用)
    num = "类属性"

    # 实例化方法(必须实例化类之后才能被调用)
    def func1(self): # self : 表示实例化类后的地址id
        print("func1")
        print(self)

    # 类方法(不需要实例化类就可以被类本身调用)
    @classmethod
    def func2(cls):  # cls : 表示没用被实例化的类本身
        print("func2")
        print(cls)
        print(cls.num)
        cls().func1()

    # 不传递传递默认self参数的方法(该方法也是可以直接被类调用的,但是这样做不标准)
    def func3():
        print("func3")
        print(A.num) # 属性是可以直接用类本身调用的
    
# A.func1() 这样调用是会报错:因为func1()调用时需要默认传递实例化类后的地址id参数,如果不实例化类是无法调用的
A.func2()
A.func3()

5. compile(source, filename, mode[, flags[, dont_inherit]]),将字符串或者AST(Abstract Syntax Trees)[2]对象转换为可执行代码。

 source 可以是普通字符串,字节字符串或AST对象。
 filename 读取代码的文件名称,如果不是从文件读取代码则传递一些可辨认的值,使用source则filename 可以使用''代替。
 mode 要编译成的代码种类,可以指定为 exec, eval, single。如果 source 是语句序列,可以是 'exec', 配合exec()使用;如果是单一表达式,可以是 'eval'配合 eval()使用;如果是单个交  互式语句,可以是 'single',exec() eval()都可以。其余参数请参考官方文档。

mode = 'exec'

>>> str = 'for i in range(4): print(i)'
>>> c = compile(str, '', 'exec')
>>> type(c)
<class 'code'>
>>> exec(c)
0
1
2
3

model = 'eval'

>>> str = '7 + 8'
>>> c = compile(str, '', 'eval')
>>> type(c)
<class 'code'>
>>> eval(c)
15
>>> exec(c)    # 无反应

model = 'single'

>>> str = 'input("请输入你的幸运数字:")'
>>> c =c oompile(str)
>>> c = compile(str, '', 'single')
>>> exec(c)
请输入你的幸运数字:6
'6'
>>> eval(c)
请输入你的幸运数字:6
'6'

6. complex([real[, imag]]) 将字符串或数字转换为一个复数

# 传入数字
>>> complex(1, 2)
(1+2j)
>>> complex(1)         # 不传imag默认为0
(1+0j)

# 传入字串
>>> complex('1+2j')
(1+2j)
>>> complex('1+0j')
(1+0j)

# 字符串 “ + ” 两边是不能又空格的
>>> complex('1 + 0j')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: complex() arg is a malformed string

7. delattr(obj, attr_name),等于del x.attr_name,用于删除一个对象的属性。

扫描二维码关注公众号,回复: 12330880 查看本文章
class A:
    x = 1
    y = 2

a = A()    
print(a.x)
delattr(A, 'x')
print(a.x)        # 报错 AttributeError: 'A' object has no attribute 'x'

8. dir([obj]),函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息。想要看某个对象的方法或属性什么的就直接dir() 它就ok了,调试过程中很好用的函数。

9. divmod(num1, num2),返回两个参数的商和余数的元组  (num1 // num2, num1 % num2), 不支持复数。

10.  enumerate(seq, start=0) 传入可遍历对象,返回一个组合序列,同时包含数据和数据下标。返回类型为enumerate(枚举)类型。参数 start 为起始位置。

>>> a = ['a', 'b', 'c']
>>> e = enumerate(a)
>>> type(e)
<class 'enumerate'>
>>> for i,j in e:
...     print(f'数据为:{i}, 下标为:{j}')
...
数据为:0, 下标为:a
数据为:1, 下标为:b
数据为:2, 下标为:c

# start的作用, 下标从1开始了
>>> e = enumerate(a, start = 1) 
>>> for i,j in e: 
...     print(f'数据为:{i}, 下标为:{j}')
...
数据为:1, 下标为:a
数据为:2, 下标为:b
数据为:3, 下标为:c   

11. filter(function, iterable), 根据传入的过滤函数(函数返回True的留下,False过滤不要)条件去过滤序列,返回新的序列。

# code
def filter2 (n):
    return n != 2

newSeq = filter(filter2, [1,2,3])
print(f'返回的类型是:{type(newSeq)}')
newList = list(newSeq)
print(f'返回的内容是:{newList}')

# print
返回的类型是:<class 'filter'>
返回的内容是:[1, 3]

12. 持续更新

引用

[1] python3-classmethod修饰符(菜鸟):https://www.runoob.com/python/python-func-classmethod.html

[2] AST(Abstract syntax tree,抽象语法树):https://blog.csdn.net/qq_23599965/article/details/90643984

猜你喜欢

转载自blog.csdn.net/qq_40702130/article/details/110038700
今日推荐