Python3 Tips


本文原链接: https://blog.csdn.net/u013600415/article/details/104343705

Python3 Tips

Python3站点信息

Python3.8标准库站点
Python3数据模型

命名空间

A namespace is a mapping from names to objects.Most namespaces are currently implemented as Python dictionaries.
命名空间是Python中的名称到对象的映射,大多数的命名空间用Python字典(dict)实现。

命名空间

对象的创建过程

  • 以Player类为例:
class Player(object):
    def __new__(cls, *args, **kwargs):
        print('Player实例创建完毕!')
        return super().__new__(cls)
    def __init__(self, playername, prefgame):
        self.playername = playername
        self.prefgame = prefgame
        print('Player实例初始化完毕!')
    def show(self):
        print('我叫{},我更喜欢玩{}这款游戏!'.format(self.playername, self.prefgame))
if __name__ == '__main__':
    p_0 = Player('茂名狙神', 'CS:GO')
    p_0.show()

# 输出信息如下:
# Player实例创建完毕!
# Player实例初始化完毕!
# 我叫茂名狙神,我更喜欢玩CS:GO这款游戏!
  • 事实上,创建一个对象分为两个步骤:
  1. Player调用__new__函数创建Player的对象实例
  2. Player调用__init__函数为刚刚创建的对象实例进行初始化工作
  • 来自官方文档的解释:

Because __new__() and __init__() work together in constructing objects (__new__() to create it, and __init__() to customize it), no non-None value may be returned by __init__(); doing so will cause a TypeError to be raised at runtime.

因为对象是由__new__()与__init__()一起协同创建的(__new__()创建类的实例而__init__()则按照我们的需求完善实例),所以__init__()只能返回None,否则在运行时将会引发TypeError

*args 与 **kwargs 的作用

  • *args表示接受任意个数(包括0)的只有参数值的参数传入,是一个元组(tuple)
def Pocket(content, *args):
    print('args的类型是:{}'.format(type(args)))
    out = '{}的配料有:'.format(content)
    for obj in args:
        out += str(obj) + ' '
    print(out)
if __name__ == '__main__':
	Pocket('小汉堡', '臭豆腐', '腐乳', '柠檬')

# 输出信息如下:
# args的类型是:<class 'tuple'>
# 小汉堡的配料有:臭豆腐 腐乳 柠檬 
  • *kwargs是关键字参数(Keyword args)的意思,表示接受任意个数(包括0)的带参数名称的参数传入,是一个字典(dict)
def SuperPocket(content, *args, **kwargs):
    print('kwargs的类型是:{}'.format(type(kwargs)))
    out = '口袋里有:{} '.format(content)
    for obj in args:
        out += str(obj) + ' '
    out += '以及各种私货:{}'.format(kwargs)
    print(out)
if __name__ == '__main__':
	SuperPocket('烤面筋', '老干妈', '吃不饱的面条', gamedisc='R6', device='EDD')

# 输出信息如下:
# kwargs的类型是:<class 'dict'>
# 口袋里有:烤面筋 老干妈 吃不饱的面条 以及各种私货:{'gamedisc': 'R6', 'device': 'EDD'}

迭代器

迭代器的官方文档

多线程

runoob多线程详解

部分内置函数

'''
    Python3内置函数
'''
# abs()
print('-3.14的绝对值是:' , abs(-3.14))

# ascii()
dob_0 = 3.14159
ascii_0 = ascii(dob_0)
print('经过ascii函数转换后的对象类型是:', type(ascii_0), '内容是:', ascii_0)

str_0 = [[1, 'Hello'], ['Temp', 7.21], ['你好']]
ascii_1 = ascii(str_0)
print('经过ascii函数转换含有非ASCII编码的字符后的对象类型是:', type(ascii_1), '内容是:', ascii_1)

# bin()
print('bin函数将整数转换成其二进制形式的字符串:', bin(10))

# bool()
print('不给参数:', bool(), '给定表达式则输出其真值:', bool(3 < 4))

# callable(object) 测试object是否可调用
class CallableTestClass:
    def __init__(self):
        print('已创建CallableTest类')
def CallableTestFun():
    print('已调用CallableTestFun函数')
print('数值,字符串,列表,元组皆不可调用:', callable(3.14), callable('Hello'), callable([3.14, ['Temp']]), callable((1, 2, 3)),
      '类名与函数皆可调用:', callable(CallableTestClass), callable(CallableTestFun))

# chr() 返回 Unicode 码位为整数 i 的字符的字符串格式
print('百分号与一个HELLO:', chr(37), chr(72), chr(69), chr(76), chr(76), chr(79))

# @classmethod 装饰器
class People:
    num = 0
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender
        People.num += 1
    def show(self):
        print('这是一位名为{}的{}'.format(self.name, self.gender))
    @staticmethod
    def getshow():
        return '人类是友善的,至少是大多数情况!目前人数: {}'.format(People.num)
    @classmethod
    def getnum(cls):
        return cls.num
person_0 = People('Mick', 'Boy')
person_1 = People('Sick', 'Boy')
person_2 = People('Bavt', 'Girl')
print('上方定义了3个人, 使用类方法查看人数:', People.getnum(), '使用静态方法:', People.getshow())

# delattr() 删除对象的某个属性
'''
person_0.show()
delattr(person_0, 'name')   # 跟这句是一样的:del person_0.name
person_0.show()
'''

# divmod(a, b) 返回元组(a // b, a % b)
print(divmod(7, 4))

# enumerate(iterable, start=0) 根据iterable中的序列或者是可迭代对象与序号绑定生成元组
word_0 = ['Ash', 'Buck', 'CDUA', 'Detector']
print(list(enumerate(word_0, 3)))

# eval(expression) eval将会把expression字符串当做python命令执行
eval('person_2.show()')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值