py特性随记

泄露秘密 提交于 2020-01-11 05:33:31

一、Python的函数传参

python所有的变量都可以看为内存中对象的‘引用’,

可变对象:list(列表),dict(字典),字典中的key值是不可更改的数据类型,而value是可更改的。

不可变对象:tuple(元祖),string,number(数字)

当函数中对一个不可变对象赋值时 并不会发生改变。

a = 1
print('a:{}'.format(id(a)))
def fun(a):
    a = 2
    print('fun_a{}'.format(id(a)))

fun(a)
print('a:{}'.format(id(a)))
print(a)

而当引用的为可变对象时,对它的操作相当于定位了它的指针 其值会发生改变

v = []
def func(v):
    v.append('1')
func(v)
print(v)

总结当一个引用传递给函数的时候,函数会复制一份引用,当值为不可变引用时,不会发生变化,

除非在函数内部重新定义一个相同名称的变量并return在函数执行的时候,其值才会改变。

二、普通方法,实列方法、类方法、静态方法

普通方法在python环境中,独立于类或者对象的函数,可以直接导入。

实例方法,使用之前先通过类实例化一个对象,然后在通过对象调用实例方法。与c++类似。实例方法的第一个参数默认传入一个self,这个self会与实例绑定

类方法,与实例方法的调用方式类似,不同的是类方法第一个参数默认传入一个类cls,而不是对象。

静态方法:对于静态方法其实和普通的方法一样,不需要对谁进行绑定,唯一的区别是调用的时候需要使用a.static_foo(x)或者A.static_foo(x)来调用.

 静态方法修饰:@staticmethod

 类方法修饰:@classmethod

三、类属性,实例属性

类属性就是提供类的使用属性,实例属性就是提供实例使用的属性

由于Python是动态语言,根据类创建的实例可以任意绑定属性。

给实例绑定属性的方法是通过实例变量,或者通过self变量

#类属性
class Student(object):
    name = 'tom'#共有属性
    __age = 12#私有属性
p = Student()

print(p.name)
print(Student.name)
#print(p.__age)#错误,不能在类外通过实例对象访问私有的类属性
#print(Student.__age)#错误,不能在类外通过类对象访问私有的类属性


#实例属性(对象属性)
class People(object):
    address = 'JZIT'#类属性
    def __init__(self):
        self.name = '1807'#实例
        self.age = '19'#实例

p = People()
p.age = 20#实例
print(p.name)
print(p.address)
print(p.age)

print(People.address)
#print(People.name)#错误,无法访问
#print(People.age)#错误,无法访问

#通过实例(对象)修改类属性

class text(object):
    cullty = 'Big Data' #类属性

print(text.cullty)
p = text()
print(p.cullty)
p.cullty='JZIT'
print(p.cullty) #实例属性会屏蔽掉同名的类属性
print(text.cullty)
del p.cullty#删除实例属性
print(p.cullty)

四、自省

自省就是面向对象的语言所写的程序在运行时,所能知道对象的类型。

五、推导式

 推导式comprehensions(又称解析式),是Python的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列的结构体。

#列表推导

lis=[i for i in range(1,100,5)]
print(lis)

#字典推导

dic={key :value for key,value in enumerate(lis)}
print(dic)

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!