python进阶日常学习随便写哒

MultipartEncoder:

POST一个多部分编码(Multipart-Encoded)的文件

return self:

return self 返回一个类的实例

Python self用法详解

Python中return self的用法

strip()函数:

去掉首尾指定字符,默认为空格

使用@property:

使用@property,@score.setter对属性设置进行限制,可以简单的调用进行可控的属性操作,如 s.score = 60, s.score;

如果不用@property,是直接调用set方法,如 s.set_score(60), s.get_score()

bytearray() 函数:

返回一个新字节数组,数组里的元素是可变的,并且每个元素的值范围: 0 <= x < 256。

Python学习笔记015——序列(字节数组 bytearray)

os.path.dirname(__file__):

返回脚本的路径,

os.path.dirname(os.path.abspath(__file__)), os.path.abspath(__file__)返回的是.py文件的绝对路径

os.path.realpath(__file__)获取当前文件的绝对路径,__file__指当前文件。

python中的os.path.dirname(__file__)的使用

format 格式化函数:

"{1} {0} {1}".format("hello", "world") # 设置指定位置

'world hello world'

callable() 函数:

callable() 函数用于检查一个对象是否是可调用的。如果返回 True,object 仍然可能调用失败;但如果返回 False,调用对象 object 绝对不会成功。

对于函数、方法、lambda 函式、 类以及实现了 __call__ 方法的类实例, 它都返回 True。

dir()函数:

不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息。

python中hasattr()、getattr()、setattr()函数的使用

hasattr(object, name): 判断object对象中是否存在name属性

getattr(object, name[, default]):获取object对象的属性的值。

setattr(object, name, value):给object对象的name属性赋值value

__repr__()方法:显示属性

元类

python中的元类Metaclass

cls

python中的cls到底指的是什么,与self有什么区别?

class A(object):
    a = 'a'
    @staticmethod
    def foo1(name):
        print 'hello', name
        print A.a # 正常
        print A.foo2('mamq') # 报错: unbound method foo2() must be called with A instance as first argument (got str instance instead)
    def foo2(self, name):
        print 'hello', name
    @classmethod
    def foo3(cls, name):
        print 'hello', name
        print A.a
        print cls().foo2(name)

作者:秦风
链接:https://www.zhihu.com/question/49660420/answer/335991541
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  1. 不是必须写成*args 和**kwargs。 只有变量前面的 *(星号)才是必须的
  2. 猴子补丁(monkey patching)。猴子补丁的意思是在程序运行时(runtime)修改某些代码。 
  3. $ python -m pdb my_script.py
    利用pdb进行debug,命令行和脚本内都能运行
  4. 迭代器是一个让程序员可以遍历一个容器(特别是列表)的对象。然而,一个迭代器在遍历并读取一个容器的数据元素时,并不会执行一个迭代。
  5. 可迭代对象iterable:只要它定义了可以返回一个迭代器的__iter__方法,或者定义了可以支持下标索引的__getitem__方法(这些双下划线方法会在其他章节中全面解释),那么它就是一个可迭代对象。可迭代对象是提供迭代器的任意对象
  6. 迭代器iterator:任意对象,只要定义了next(Python2) 或者__next__方法,它就是一个迭代器。
  7. 迭代iteration:从某个地方(比如一个列表)取出一个元素的过程。当我们使用一个循环来遍历某个东西时,这个过程本身就叫迭代。
  8. 生成器就是只迭代一次的迭代器,在运行时生成值。一般生成器以函数出现
  9. my_string = "Yasoob"
    my_iter = iter(my_string)
    next(my_iter)    # next()获取序列的下一个元素
    # Output: 'Y'

str对象是一个可迭代对象,而不是一个迭代器。这意味着它支持迭代,但我们不能直接对其进行迭代操作。内置函数,iter。它将根据一个可迭代对象返回一个迭代器对象。

 

  1. Map会将一个函数映射到一个输入列表的所有元素上,一般配合lambdas函数使用,不但可以用于一个列表的处理,还可以用于包含函数的列表。list(map(function_to_apply, list_of_inputs))
  2. filter过滤列表中的元素,并且返回一个由所有符合要求的元素所构成的列表,符合要求即函数映射到该元素时返回值为True,类似于for循环,但是是内置函数,比for循环更快。 list(filter(lambda函数, list))
  3. reduce能对一整个列表进行计算并返回结果:product = reduce( (lambda x, y: x * y), [1, 2, 3, 4] )
  4. set中不会包含重复值,可以用于去重。对比两个集合的交集:set1.intersection(set2),结果也为set(['a', 'b']);用差集(different)检查出无效的数据:set1.difference(set2);还可以用{}创建集合:a_set = {'red', 'blue', 'green'}
  5. 三元运算符(Python中叫条件表达式): condition_is_true if condition else condition_is_false;还有一种使用元组的方法不常用,尽量避免这种元组表达式:(if_test_is_false, if_test_is_true)[test]
  6. 装饰器是修改其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic

装饰器:

一切皆对象,函数也是,函数也可以赋给其他变量,函数后加上括号就是在调用函数,没有括号时就可以被到处传递,赋给变量;

可以在函数中定义函数,也就是创建嵌套的函数。定义在函数里面的函数不能在外部访问,就像函数内的变量无法在函数外访问一样;

可以在函数中返回函数,不一定非要在函数中进行执行,所以可以返回某个函数,将它赋给某个变量,需要使用时加上括号就能调用函数了,括号就是一个执行函数的写法,所以可以类似于 hi()() 这样去调用返回的函数;

可以将函数作为参数传给另一个函数使用

@符号只是一种简写方式;function.__name__可以得到function的函数名;functools.wraps中wrap(fun)可以让被装饰的函数保持本真,不迷失自己的姓名,不然就会被重写了函数的名字和注释文档(docstring)

@wraps接受一个函数来进行装饰,并加入了复制函数名称、注释文档、参数列表等等的功能。这可以让我们在装饰器里面访问在装饰之前的函数的属性。

常用于授权, 日志

在函数中嵌入装饰器,装饰器类

 

  1. 每当你将一个变量赋值为另一个可变类型的变量时,对这个数据的任意改动会同时反映到这两个变量上去。新变量只不过是老变量的一个别名而已。这个情况只是针对可变数据类型。
  2. 在Python中,每个类都有实例属性。默认情况下Python用一个字典来保存一个对象的实例属性。这非常有用,因为它允许我们在运行时去设置任意的新属性。对于有着已知属性的小类来说,它可能是个瓶颈。这个字典浪费了很多内存。规避方法:使用__slots__来告诉Python不要使用字典,而且只给一个固定集合的属性分配空间。
class MyClass(object):
  __slots__ = ['name', 'identifier']
  def __init__(self, name, identifier):
      self.name = name
      self.identifier = identifier
      self.set_up()
  # ...
  1. Virtualenv 是一个能够帮我们创建一个独立(隔离)的Python环境的工具

 

兼容Python2和Python3:

  1. 导入__future__模块。它可以帮你在Python2中导入Python3的功能。
  2. 模块重命名,as关键字的作用。它将导入的模块映射到urllib.request,所以我们通过urllib_request这个别名就可以使用urllib2中的所有类和方法了。    import urllib2 as urllib_request # for Python 2
  3. 强制放弃Python2过期的内置功能,Python2中有12个内置功能在Python3中已经被移除了。要确保在Python2代码中不要出现这些功能来保证对Python3的兼容。    from future.builtins.disabled import *
  4. 标准库向下兼容的外部支持。    pathlib pip install pathlib
  5. 详细见Porting Python 2 Code to Python 3

 

你可能感兴趣的:(python)