标签:
Hello Python :)
补充数据类型:set(简单记忆:不允许重复的列表)
s = set() #创建空集合
s.add(11)
s.add(11)
for s1 in s :
print(s1) #仅仅输出一个11
细节:
创建set集合的时候,也可以接受元组、字符串、列表等可迭代对象。
方法:
clear() :清空
difference() :
s1 = {11,22,33}
s2 = {22,44}
print(s1.difference(s2))
#{11,33}
print(s2.difference(s1))
#{44}
difference_update():
print(s1.difference_updata(s2))
#None 所以无返回值
print(s1)
#{33,11} 所以这个方法是找到s1存在而s2不存在的,更新自己。
discard() :移除指定元素,不存在不报错
remove() : 移除指定元素,不存在会报错
intersection() :取两个几个集合的交集
intersection_update() :取交集并且更新自己
isdisjoint() :判断一下是否有交集
issubset() :是否为子序列
issuperset() :是否为父序列
pop() : 移除一个元素并返回
symmetric_difference() :
s1 = {11,22,33}
s2 = {22,44}
print(s1.symmetric_difference(s2))
#输出{33,44}
symmetric_difference_updata() :...
union() :并集
update() :更新
----------------------set结束,不太重要···----------------
三元运算
例子:name = "Kepler" if 条件 else "Stark"
如果条件为True,name = "Kepler"
如果条件为False,name = "Stark"
不同数据类型在内存中的存址方式:
类比于C语言,Python中的列表就像链表。
str就像数组,所以本身不能变化,仅能重新分配
深浅拷贝:
import copy
n1 = 123
n2 = copy.copy(n1)
print(id(n1))
print(id(n2))
#输出的id号一样,这是浅拷贝
n2 = copy.deepcopy(n1)
print(id(n1))
print(id(n2))
#输出的id号一样,这是深拷贝
#综上,对于数字和str,无论深浅拷贝,id都是一样的,因为有Python的本身优化
对于列表等,情况就不同了。
n1 = {11:"Kepler" , 22:"Air"}
n2 = copy.copy(n1)
print(id(n1))
print(id(n2))
#id相同
print(id(n1[11]))
print(id(n2[11]))
#id不同
#综上,浅拷贝仅仅拷贝第一层,后续的依旧指向了原始地址
n2 = copy.deepcopy(n1)
#这时候,会一直拷贝到数字和str这一层,即有多少层就拷贝多少层,直到str和数字(即最后一层)
函数初步:
Q:如何定义函数?
def first() :
Something...
Q:如何调用函数?
first()
Q:函数如何返回?
return Something
Q:函数的参数?
def first(args) :
Something...
# args 被叫做形式参数,写法随意,被调用时,first(123),中的123被叫做实际参数,这点和Java、C等有些差别。值得注意的是,函数有多个形参时,也可以不按顺序,只要通知编译器就好了。
默认值:
def first(args,args1 = 123) :
Something...
#这个first函数,可以这样调用:first(110)、first(110,220),其中第一种不指定args1,默认值是123,第二种是指定了args1 = 220。值得注意的是,要想使用默认参数,一定要放在后面,也可以有多个默认参数。
动态参数:
顾名思义,传多少参数都可以。
a)def first(*args) :
Something...
#这样,first()函数可以接受任意多的参数。内部原理:动态参数的本质是把传入的任意多个参数变成了元组的形式,当然可以嵌套等...
b)def first(**args) :
Something...
#这种类型的动态参数要这样调用:first(k1=123,ke=234)。内部的本质是将传入的参数转换成字典。所以传入的时候要遵循字典的定义,即KV。
c)以上的两种动态参数可以混合使用,也可以和普通的形式参数混搭,但要注意a)的要在b)的前面。
细节:
def first(*args) :
print(args)
first([11,22,33,44])
first(*[11,22,33,44])
#第一个输出:([11,22,33,44],)
#第二个输出:(11,22,33,44)
def first(**args) :
print(args)
dic = {"K1":11,"K2":22}
first(dic)
firsst(**dic)
#第一个会报错
#第二个才是正确的传入动态参数字典的方法,当然KV形式当然是可以的
全局变量和局部变量:
和Java等高级编程语言相通。
如果想在函数内(局部变量)修改全局变量,那就使用global关键字。
例子:
p = "Kepler"
def fun1():
p = "Air"
def fun2():
global p
p = "Stark"
def fun3() :
print(p)
fun1()
fun3()
#输出Kepler
fun2()
fun3()
#输出Stark
Got it?
标签:
原文地址:http://www.cnblogs.com/AirStark/p/5719392.html