python 打印对象的全部属性_Python的一些基础入门概念和语法

8e474fd47c8daa6fc2bf6ed18dae0582.png

1.Python的数据类型:整数,浮点数,字符串,布尔值,空值

2.range(n):整数序列

3.isinstance(x,int/float):数据类型检查

4.定义函数的参数:位置参数、默认参数、可变参数和关键字参数

位置参数:如power(x, n)

默认参数:如power(x, n=2),注意:必选参数在前,默认参数在后

可变参数:如calc(*numbers),传递参数时也可以加*号把list或tuple的元素变成可变参数传进去

关键字参数:如person(name, age, **kw),关键字参数允许你传入0个或任意个含参数名的参数,些关键字参数在函数内部自动组装为一个dict

命名关键字参数:如person(name, age, *, city, job)

5.切片功能:list或tuple的部分元素是非常常见的操作,L[0:3],L[:3],L[-2:],L[:10:2](步长是2)

6.迭代:通过for ... in来完成

7.enumerate函数可以把一个list变成索引-元素对:如for i, value in enumerate(['A', 'B', 'C'])

8.判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断,isinstance('abc', Iterable)

9.生成器:generator,把一个列表生成式的[]改成(),就创建了一个generatorg = (x * x for x in range(10)),节省空间

10.map()函数接收两个参数,一个是函数,一个是Iterable,如r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]),

def f(x): return x * x

7ee52bef9ce7bfc1b93e87139cd695cd.png

11.reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,

reduce把结果继续和序列的下一个元素做累积计算,reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

12.filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素

13.sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序,要进行反向排序, 不必改动key函数,可以传入第三个参数reverse=True

14.函数作为返回值:高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回

15.匿名函数:list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])),匿名函数lambda x: x * x

16.装饰器:增强now()函数的功能,比如,在函数调用前后自动打印日志

17.偏函数:functools.partial(int, base=2),二进制字符串

18.私有变量:加双下划线__,如__name,特殊变量:__name__

19.type():获取对象类型

20.dir():获得一个对象的所有属性和方法

21.getattr()--获取对象属性、setattr()--设置对象属性以及hasattr()--判断对象是否有某一属性

22.实例属性和类属性

23.动态绑定实例方法和类方法

24.__slots__:限制实例的属性,__slots__ = ('name', 'age') # 用tuple定义允许绑定的属性名称

25.@property:把一个方法变成属性调用,@score.setter:把一个setter方法变成属性赋值

26.多继承和多重继承

27.MixIn:给一个类增加多个功能,这样,在设计类的时候,我们优先考虑通过多重继承来组合多个MixIn的功能,而不是设计多层次的复杂的继承关系

28.__str__():返回方法中设置的字符串

29.__repr__():打印变量的返回值

30.__iter__():设计用于用于for ... in循环,不断调用该迭代对象的__next__()方法拿到循环的下一个值

3030f647defa8cb9ae58e0e8da0faf37.png

31.__getitem__():表现得像list那样按照下标取出元素

32.__getattr__:调用类的方法或属性

33.__call__:直接在实例本身上调用,

34.callable():判断一个对象是否是“可调用”对象

35.Enum:枚举类型,@unique装饰器可以帮助我们检查保证没有重复值

36.type()函数可以查看一个类型或变量的类型

37.metaclass,直译为元类,metaclass的类名总是以Metaclass结尾,例:class MyList(list, metaclass=ListMetaclass)

38.try...except...finally...:异常处理机制,所有的错误类型都继承自BaseException

39.logging.exception(e):Python内置的logging模块可以非常容易地记录错误信息

40.assert:断言

41.调试器pdb:python -m pdb err.py

42.单元测试:setUp()和tearDown()方法。这两个方法会分别在每调用一个测试方法的前后分别被执行,class TestDict(unittest.TestCase)

43.doctest:不但可以用来测试,还可以直接作为示例代码

44.IO读写:open()函数,读文件的模式打开一个文件对象,f = open('/Users/michael/test.txt', 'r'),'r'表示读,with语句来自动帮我们调用close()方法,with open('/path/to/file', 'r') as f

45.StringIO:在内存中读写str

46.BytesIO:在内存中读写bytes,操作二进制数据

47.操作文件和目录:os.path.abspath('.'),os.path.join('/Users/michael', 'testdir'),os.mkdir('/Users/michael/testdir'),os.rmdir('/Users/michael/testdir')

48.序列化,pickle模块来实现序列化,pickle.dumps(d),pickle.dump()直接把对象序列化后写入一个file,pickle.loads()方法反序列化出对象,用pickle.load()方法从一个file-like Object中直接反序列化出对象

49.多进程(multiprocessing),fork,可以在Python程序中轻松创建子进程,进程池(pool)

50.多线程:_thread和threading,_thread是低级模块,threading是高级模块

4f3fe6d3ed921ea4c86f1c4eccd7ca2a.png

51.锁lock:lock.acquire(),lock.release()

52.Python解释器由于设计时有GIL全局锁,导致了多线程无法利用多核。多线程的并发在Python中就是一个美丽的梦

53.ThreadLocal:ThreadLocal变量虽然是全局变量,但每个线程都只能读写自己线程的独立副本,互不干扰。ThreadLocal解决了参数在一个线程中各个函数之间互相传递的问题

54.datetime:datetime.strptime(),str转换为datetime。 strftime()-datetime转换为str

55.itertools模块提供的全部是处理迭代功能的函数

56.@contextmanager:__enter__和__exit__

57.urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
封装是面向对象编程中的一个重要概念,它主要是指将数据和行为封装在一起,形成一个类,并对外提供接口,隐藏实现细节,保证数据安全性和代码可维护性。 Python中的封装主要通过访问权限控制实现。在Python中,属性和方法都有其对应的访问权限,主要有公有、私有和受保护三种。 公有属性和方法可以被类内部和外部访问,私有属性和方法只能在类内部访问,受保护属性和方法也只能在类内部和子类中访问。 下面通过一个例子来说明Python中如何进行封装。 ```python class Person: def __init__(self, name, age): self.__name = name # 私有属性 self.__age = age # 私有属性 def say_hello(self): print("Hello, my name is %s, and I'm %d years old." % (self.__name, self.__age)) def set_age(self, age): if age < 0 or age > 150: print("Invalid age!") else: self.__age = age # 修改私有属性 p = Person("Tom", 20) p.say_hello() # 输出:Hello, my name is Tom, and I'm 20 years old. p.__name # 报错:AttributeError: 'Person' object has no attribute '__name' p.set_age(200) # 输出:Invalid age! ``` 在上面的例子中,我们定义了一个Person类,其中包含了两个私有属性__name和__age,以及一个公有方法say_hello和一个受保护方法set_age。这样,外部就无法直接访问__name和__age属性,只能通过调用say_hello方法来输出实例的信息。同时,set_age方法可以修改私有属性__age,但是它会对输入的年龄进行检查,保证数据的合法性。 可以看出,Python中的封装通过访问权限控制实现,可以保证数据的安全性和代码的可维护性。在实际开发中,我们应该尽量使用封装来保护数据,防止出现意外错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值