python 难点记录


1.类 和对象:

1.类对象,实例对象 2.类成员,实例成员 3.类函数,实例函数  ---------- 需要理解之前的关系,能够相互调用,作用范围

问题:

#类内
#1.类方法中能否访问 实例属性?                                                 不行
#2.类方法总访问修改类属性                                                    cls.country
#3.实例方法中能否访问类属性?修改类属性?                            可以,无效  self.county
#4.实例方法中访问修改实例属性                                                 self.a
#类外
#1.实例对象能否访问类属性?修改类属性?                               可以,无效
#2.类对象能否访问实例属性?                                                    不行
#3.实例对象能否访问类方法?                                                    可以,可以通过类方法修改类属性
#4.类对象能否访问实例方法?                                                    不行

class people:
    country = 'china'           #类属性
    def __init__(self):
        self.a=100             #实例属性

    # 类方法,用classmethod来进行修饰
    @classmethod
    def getCountry(cls):
        return cls.country  #---------1.可访问及修改类属性
       # cls.a               #---------2.不能访问实例属性

    @classmethod
    def setCountry(cls, country):
        cls.country = country #---------1.可访问及修改类属性


    #实例方法
    def fun_1(self):
        self.c=500                             #这是实例属性
        print(self.country)                    #可访问类属性,修改类属性,会生成实例属性


p = people()
p.b=100
print(p.country)        #类外:实例对象可访问类属性,不能修改,修改会生成实例属性
people.country='chang'  #类外:类对象可访问及修改类属性


print(p.a)             #类外:实例对象可访问修改实例属性
#print(people.a)        #类外:类对象不可访问修改实例属性
#people.b               #b是 p 特有的


p.fun_1()               #实例对象可访问实例方法
#people.fun_1()         #类对象不可访问实例方法

print(p.getCountry())        # 类外:实例对象访问类方法
print(people.getCountry() )  # 类外:类对象访问类方法

p.setCountry('japan')
people.setCountry('jjj')
print(p.getCountry())
print(people.getCountry()   )

print(p.c)

 

2.python的变量及存储方式

(转自http://www.cnblogs.com/Eva-J/p/5534037.html)

 

然后理解变量的赋值,浅拷贝,深拷贝

1.变量的赋值:

1.str的赋值

2.数据结构的赋值

2.浅拷贝:

浅拷贝只会copy一层当sourceLst列表发生变化,copyLst中存储的lst内存地址没有改变,所以当lst发生改变的时候,sourceLst和copyLst两个列表就都发生了改变。这种情况发生在字典套字典、列表套字典、字典套列表,列表套列表,以及各种复杂数据结构的嵌套中,所以当我们的数据类型很复杂的时候,用copy去进行浅拷贝就要非常小心。。。

 

3.深拷贝

深拷贝会完全复制原变量相关的所有数据,在内存中生成一套完全一样的内容,在这个过程中我们对这两个变量中的一个进行任意修改都不会影响其他变量

 >>>a = {1: [1,2,3]}
>>> b = a.copy()
>>> a, b
({1: [1, 2, 3]}, {1: [1, 2, 3]})
>>> a[1].append(4)
>>> a, b
({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})

 

深度拷贝需要引入 copy 模块:

实例

>>>import copy
>>> c = copy.deepcopy(a)
>>> a, c
({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})
>>> a[1].append(5)
>>> a, c
({1: [1, 2, 3, 4, 5]}, {1: [1, 2, 3, 4]})

3.函数的参数:

  • 1.普通参数:传参时,需要按照函数定义的参数数量,及类型 进行传参
  • 2.默认参数:参数写上默认值,且必须放在所有参数的最后
  • 3.动态参数:
    • def func1(*args) 接受多个参数,内部自动构造元组,序列前加*,会把传入的参数构造为一个元组 注意:fun() argument after * must be an iterable, not int:数组、字符串、列表都是iterable的
    • def func2(**kwargs) 接收多个参数,内部自动构造字典,序列前加**,直接传递字典
      def func3(*args,**kwargs):接受多个参数,既可以自动构造元组,又可以自动构造字典。

  4.函数的返回:返回多个值,以元组的形式返回

例子:

def fun1(*arg):

  print(arg)

a=[1,2,3,4,5]

fun1(*a)---->  输出结果为:(1,2,3,4,5)   将列表a中的值分别传入作为元组的元素

fun1(a)---- >  输出结果为:([1,2,3,4,5],)  将列表a作为一个整体传入作为元组的元素

  

def fun1(*arg):

  print(arg)

b=[1,2,3,4,5]

c='anna'

fun1(b,*c)#---->  输出结果为:([1, 2, 3, 4, 5], 'a', 'n', 'n', 'a')

fun1(*b,c)#---- > 输出结果为:(1, 2, 3, 4, 5, 'anna')

 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

testdata={'k1':'data1','headers':'data2','json';'data3','data':'data4'}

def fun1(**testdata)

  k1data=testdata.get('k1')

  headers=testdata.get('headers')

  json=testdata.get('json‘)

通过字典将值传递进去,再使用get函数来一一获取字典内的值。

 

  

 

需要注意的是必须*args在前**kwargs在后,参数也是一样。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM