python深层机理

###一.变量
1.
可变对象和不可变对象:
不可变对象包括int,float,string,tuple等。
可变对象包括list,dict,自定义类的实例等。
2.
变量在内存中新建时,系统都会给他分配一个地址,然后通过地址去查找或引用他的值。 
Python的所有变量其实都是指向内存中的对象的一个指针,都是值的引用
3.
在python中通过= 复制的变量,都是同时把变量的值,也把变量在内存中的地址复制也过去了。
即=复制过的变量不仅内存地址一样,变量的值也一样。
但是需要注意的是:对于不可变类型(如int)的变量,如果要更改变量的值,
则会创建一个新值,并且给这个新值分配一个新的内存地址,
然后把变量指向这个新值的内存地址上,而旧值如果没有被引用就等待垃圾回收。
如果是可变类型变量。如果修改变量的值,则可以直接修改变量的值,变量的引用地址不会变。
4.
python中变量要先赋值才能使用,实际上是可以看做指针
变量相当于是值的标签,也可以视为变量指向这个值,对于a=4凡是有等号只是赋值不是赋的关系
a=[1,2,3]
b=a
a.append(4)
print(b)#b=[1,2,3,4]
#在python中对于list是浅拷贝,只拷贝首地址,而其他元素通过偏移量来找到
#而对于a.apeend(4)这个没有等号就没有地址的改变,而是通过偏移量找到最后的位置添加4
#而对于b也同时指向了这个列表,所以b也改变了
5.
同一个代码块中或者一个py文件的不可变对象,
只要值是相等的就不会重复创建新的对象,而是直接引用已经存在的对象
6.闭包
函数外的变量无法在函数内被修改,
一旦被赋值该变量即为本地变量,而且本地变量必须先赋值才能使用
python运行前会先查看全部代码,确定本地变量,之后函数内的本地变量执行的时候都必须满足先赋值后使用
1.
a=1
def fun():
       y=a+1
       a=2
       print(y)
       print(a)
fun()
print(a)
如上代码,运行是错误的,因为pytho运行前会先看下代码确定本地变量,在a=2语句时a是本地变量,
那么y=a+1语句调用了a这个本地变量,该语句在之前a没有被赋值,所以是运行错误
2.
a=1
def fun():
    a=a+1
如上代码a已经被确定是本地变量,a+1的a是还没有值的所以错误
3.
a=1
def fun(a):
    a=a+1
    print(a)
fun(a)#2
print(a)#1
如上代码a被赋值a成为本地变量,a=a+1时此时的a是有值的,传参传进来的,
但函数内的本地变量与函数外的变量是无关的
4.对于类来说改变类的属性的值,这个类是没有被改变的,属性会被改
class A():
       def __init__(self):
              self.s=1
a=A()
def fun():
     a.s=2
     print(a.s)
fun()#2
print(a.s)#2


###二.函数参数类型
1.
位置参数,默认参数,可变参数,命名关键字参数,关键字参数
def fun4(a,b=0,*c,d,**e):
       print(a)#1 #
       print(b)#2 #默认参数如果没给值就会赋默认值
       print(c)#(3,4) #可变参数,参数个数可变,这些可变参数在函数调用时自动组装为一个tuple
       print(d)#5 #命名关键字参数,必须传入参数名
       print(e)#{'g':6,'h':8}#可以传入任意个关键字参数,并在调用的时候组装为一个dict
fun4(1,2,3,4,d=5,g=6,h=8)
2.
#Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去
def fun5(a,b,c):
fun5(*[1,2,3])#这样传入的参数就会变成解包成三个参数传进去
3.
def a(x=[1]):
       x.append(2)
       print(x)
def fun6():
       a()#[1,2]
       a([2])#[2,2]
       a()#[1,2,2]
fun6()
#默认参数只会执行一次,python在编译的时候已经确定好了每个变量的地址,
#之后不传参数的都继续在该地址上进行操作
#第一次执行时往x添加2此时的默认参数x的地址未变,第二次无参调用时在固定的x地址又加了2
4.
def fun():
    list1=[[]]
    list2=list1*2
    list2[0].append(1)
    print(list2)#[[1],[1]]
#python的乘法运算就是把里面的值复制几份,他们指向的是同一个内存地址

###三.list
1.append
对于append会直接将整体元素添加到列表的末尾

2.extend
参数应该是可迭代的对象,extend函数会将参数解包再加入列表中
a=[2]
a.extend([1,[2,3]])
#对于该extend会对该列表进行一次解包,1,[2,3]加入到a中,所以结果为[2, 1, [2, 3]]

3.insert
a.insert(0,1)#在0的位置插入字符1,后面的元素后移

4.切片
a[0:0]=[1,2,7]#在0的位置把1,2,7依次加进列表中
#如果a[0:0]=[[1,2,7]]则是在0的位置加进[1,2,7]
a[len(a):]#在末尾加

5.查找字符
a.find("1")#找到就返回位置,找不到返回-1
a.index("1")#找到返回位置,找不到就出错


###四.字典
1.查找字典的键存不存在
setdefault(key,value)#如果存在返回1,如果不存在返回value的值,所以value不要指定1
2.get() 函数返回指定键的值,如果值不在字典中返回默认值None

###五.集合
s1|s2两个集合的合集

s1 - s2 s1中去除掉s2中有的元素  {2, 3}

s1 & s2 两者的交集{1,4}

s1 ^ s2元素只出现在一个集合中{2,3,5,13}

###六.
1.join函数会在字符之间加入头和尾不加
"&".join("adf")#->a&d&f

2.三元表达式
a=10 if a==1 else 11
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355

推荐阅读更多精彩内容

  • Android MotionEvent 详解,之前用了两篇文章 事件分发机制原理 和 事件分发机制详解来讲解事件分...
    吕侯爷阅读 1,059评论 0 7
  • 鱼骨图是一种发现问题“根本原因”的方法,是透过现象看本质的分析方法。使用鱼骨图分析通常有三步: 1.确定大要因“大...
    花得一阅读 123评论 0 0
  • 不足百年生,堪有千岁忧 命如花期短,怎会恨长生 痛失辩日心,断折马良笔 哀己同哀人,成人心满痕 落素映人老,旧岁待...
    秋风清骨阅读 245评论 0 1
  • 一、病号饭。 小时候有时候会傻傻的想生病,因为生病了,就能吃到妈妈亲手做的鸡蛋手擀面。 鸡...
    天涯芳草_338a阅读 421评论 1 3