Python-Day8

set 集合

list    ---> 允许重复的集合,可以修改,有序

tuple ---> 允许重复的集合,不可修改,有序

dic    ---> 允许重复的集合,可以修改,无序

set    ---> 不允许重复, 无序

 

1. 创建

  1.    s = set()       #创建空集合时使用这种方式

>>> l = [11,22,33,44,33,22,11,]
>>> s = set(l)
>>> s
{33, 11, 44, 22}
>>>

  2.    s = {11,22,33,44}  #直接创建,若s={} 会被当作字典类型

 

2. 常用方法

  s.add(33)   --->  添加元素

  s.clear()     --->  清空集合

  ret = a.difference(b)   --->   返回 a 存在 b 不存在的元素组成的集合赋给 ret

  a.difference(b)      --->  返回 a 存在 b 不存在的元素组成的集合赋给 a , 即更新自己

  s.discard(33)   --->   移除指定元素,若该元素不存在,不报错

  s.remove(33)   --->   移除指定元素,若该元素不存在,报错

  ret = a.intersection(b)      --->   取交集,赋给 ret
  a.intersection_update(b)   --->   取交集,赋给 a, 即更新 a

  ret = a.isdisjoint(b)   --->   没有交集返回True

  ret = a.issubset(b)    --->   a是b的子序列返回True

  ret = a.issuperset(b)  --->  a是b的父序列返回True

  ret = a.pop()   --->   随机移除元素到ret中

  ret = a.symmetric_difference(b)   --->   取对称差集到ret中(即a中有的且b中没有的 + b中有的a中没有的)

  a.symmetric_difference_update(b)   --->   取对称差集更新到a中(即a中有的且b中没有的 + b中有的a中没有的)

  ret = a.union(b)   --->   返回 a b 的并集到ret中

  a.update(b)   --->   将b合并到a中

 

三元运算符

  ret = value1 if condition else value2      ----->  如果condition为真,ret = value1, 否则=value2

 

内存中的表示

  str ---> 一次性创建,不可被修改,若要修改只会产生一个新的

  list ---> 类似 C语言 中的链表结构

深浅拷贝

  ******对 int str 来说,无论深拷贝 浅拷贝 赋值, 地址都是一样的******

  赋值:

n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}
  
n2 = n1

  

 浅拷贝:只拷贝最外面一层

import copy
  
n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}
  
n3 = copy.copy(n1)

  

  深拷贝:除 int str 外都拷贝

import copy

n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}

n2 = copy.deepcopy(n1)

  

 

函数

  定义函数,解释器会将函数放在内存中并不执行,之后调用函数的时候才执行该函数。

  def function_name(form_parameters1, f_p2, ...):

    function_body...

    ................

    return anything

  调用的时候可以按默认形参顺序赋以实参,也可以注明 函数名(形参2 = 实参2,形参1 = 实参1)不按顺序来 指定参数

  默认参数 放在形参列表的后面

  动态参数

  *args 默认元组类型

def fff(*a):
    print(a, type(a))

fff(111,222,333,444,555,[111,222],'huad')

#>>>>>>>>>>>>>>>按顺序
(111, 222, 333, 444, 555, [111, 222], 'huad') <class 'tuple'>

  **kwargs 默认字典类型

def fff(**a):
    print(a, type(a))

fff(k1 = 'v1', k2 = 'v2', k3 = 222, k4 = [11,22,33])

#>>>>>>>>>>>>无序
{'k3': 222, 'k4': [11, 22, 33], 'k1': 'v1', 'k2': 'v2'} <class 'dict'>

  都包含时 *args 一定在 **kwargs 前面,最前面可以有其他形参

def fff(c, *a, **b):
    print(c, type(c))
    print(a, type(a))
    print(b, type(b))

fff(11,22,33, k1=11,k2=22)

#>>>>>>>>>>>

11 <class 'int'>
(22, 33) <class 'tuple'>
{'k1': 11, 'k2': 22} <class 'dict'>

  为动态参数传入 列表 元组 字典

  实参前面 带有* 不带* 的区别

def fff(*args):
    print(args, type(args))

li = [11, 22, 33, 44]

fff(li)
fff(*li)

#>>>>>>>>

([11, 22, 33, 44],) <class 'tuple'>
(11, 22, 33, 44) <class 'tuple'>

  

def fff(**kwargs):
    print(kwargs, type(kwargs))

dic = {'k1': 'v1'}

# fff(dic)  #报错
# fff(*dic)  #报错
fff(**dic)

#>>>>>>>>>>>>
{'k1': 'v1'} <class 'dict'>

  

全局变量 局部变量

  全局变量可以被局部读取,但不能修改,若要修改前面加 globle XXX

PPP = 'hello' #全局变量

def fun1():
    a = 123 #局部变量
    global PPP   #若没有这句,表示新建了一个局部变量,输出为hello
    PPP = 'world'
    print(a)

def fun2():
    b = 456
    print(PPP)
    print(b)

fun1()
fun2()

#>>>>>>>>>>>>>>
123
world
456

  书写时,让 全局变量 都大写,局部变量 都小写

 

 

posted @ 2017-03-19 18:20  云中王  阅读(245)  评论(0编辑  收藏  举报