1.类 和对象:
1.类对象,实例对象 2.类成员,实例成员 3.类函数,实例函数 ---------- 需要理解之前的关系,能够相互调用,作用范围
问题:
#类内
#1.类方法中能否访问 实例属性? 不行
#2.类方法总访问修改实例属性 cls.country
#3.实例方法中能否访问类属性?修改类属性? 可以,无效 self.county
#4.实例方法中访问修改实例属性 self.a
#类外
#1.实例对象能否访问类属性?修改类属性? 可以,无效
#2.类对象能否访问实例属性? 不行
#3.实例对象能否访问类方法? 可以,可以通过类方法修改类属性
#4.类对象能否访问实例方法? 不行
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.深拷贝:
深拷贝会完全复制原变量相关的所有数据,在内存中生成一套完全一样的内容,在这个过程中我们对这两个变量中的一个进行任意修改都不会影响其他变量
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,*a)----> 输出结果为:(1,2,3,4,5,‘anna‘)
fun1(b,a)---- > 输出结果为:([1,2,3,4,5],‘anna‘)
需要注意的是必须*args在前**kwargs在后,参数也是一样。