python基础学习第五天

时间:2022-11-26 20:45:10

文章目录:

5.1 深浅拷贝

5.1.1 浅拷贝

5.1.2 深拷贝

5.2 集合set

5.2.1 更新set集合_添加

5.2.2 update

5.2.3 remove, pop, clear, del

5.2.4 交集,并集

5.2.5 差集, 对称差集

5.2.6 超集,子集

5.3 函数:

5.3.1、概念

5.3.2、创建

5.3.3、参数

5.3.4、函数的reture

5.3.5、定义域


# 符号说明

()  #元组 用法: ('xx','yy')  不可修改

[]  #列表 用法: ['xx','yy']  可修改,列表必须是可hash的,列表与字典是不可hash的

列表创建: a=[1,2]

   b=list([1,2])

{}  #字典 用法: {'xx':'yy',('zz':'dd')} 可修改字段


5.1 深浅拷贝


5.1.1 浅拷 = 相当于软链接

# 变量中列表就相当于文件,int与str就相当于是一个目录,

# (软链接可以将目录名称更称不会修改文件本身,但如果修改文件那么A跟B就会同时修改)。

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

print(a)

打印: [[1, 2], 3, 4]

b = a.copy()

b[1]=321

print(b)

打印结果为: [[1, 2], 321, 4]# 软链接目录名称改了也不会影响原来的目录

print(a)

打印结果为: [[1, 2], 3, 4]# b修改a不修改也就正常了


# 但如果是修改变量中的列表时,它会修改内存中指的值,a跟b会同时修改

b[0][1] = 234

print(b)

print(id(b[0][1]))# 打印结果为: 1388964880   两个内存结果都一样


print(a)

打印结果为: [[1, 234], 321, 4]# 改了软链接中文件,那么2个文件都会同时更称

[[1, 234], 3, 4]

print(id(a[0][1])) # 打印结果为: 1388964880   

# 相当于一个链接的文件,修改b也相当于修改a了


5.1.2 深拷贝 = 完整克隆

变量 = copy.deepcopy(要复制的变量)    # 完整克隆一个数据


5.2 set

set: 把不同的元素组成一起形成集合,是py基本的数据类型 

# 去重功能,当有两个相同的元素的时候会去掉重复的字符串

# 必须是可hash的字符串,set是无序的,只能通过循环遍历或使用in、not in来访问或判断集合元素

# set 不能做为键


5.2.1 更新set集合_添加

a = ["a","b"]

c=set(a)

c.add("c")

print(c)结果: {'b', 'a', 'c'}


5.2.2 update 

c.update("ab1")

print(c)结果: {'b', '1', 'a', 'c'} 

# ab1 做为一个序列添加,有重复的不会添加序列, 没有重复的会直接添加到列表中


c.update([123,321])  # 当为列表时,它会将序列当成一个整体加入到变量中,有重复的也不会添加 

print(c)# {321, 'b', 'a', 123}


5.2.3 remove, pop, clear, del

c.remove("a") 结果: {'b', '1', 'c'} 

c.pop()结果: 随机删除一个

c.clear()# 结果: 清空列表 返回 set()

del c # 直接删除变量,打印报错因为已经没了


5.2.4 交集,并集

a=set([1,2,3,4,5])

b=set([1,2,3,4,6])

交集: print( a & b)   # {1, 2, 3, 4}

并集: print( a | b)   # {1, 2, 3, 4, 5, 6}


5.2.5 差集, 对称差集

差集: print(a.difference(b))   in a but bot b  # A有的B没有的打印出来

第二种方法: print (a-b) 

# {5}   反过来也一样

对称差集: print(a.symmetric_difference(b))     AB有的都不打印,只打印它共同没有的字符串或数值

第二种方法: print ( a^b )

# {5, 6}  


5.2.6 超集,子集

print(a.issuperset(b))# A是不是完全包含B,否 返回 False 相当于A>B

print(a.issubset(b))# A是不是B的子集   相当于A<B


name1=set(["xiong","wei","hua","fa"])

name2=set(["xiong","yua","yuan","hua"])


# 子集        # 判断两个字段是否相等

print(name1<name2)      # False


# 父集        # 判断两个字段是否相等

print(name1>name2)      # False


# 并集        # 打印去重之后的

print(name1 | name2)    # {'hua', 'xiong', 'yuan', 'wei', 'fa', 'yua'}


# 交集        # 共同有的

print( name1 & name2 )  # {'hua', 'xiong'}


# 差集        # 用集合1减去集合2的相同字段,取出与集合2不相关的

print( name1 - name2 )  # {'wei', 'fa'}


# 对称差集     # 取出A跟B有的,打印两个集合没有的字符串

print( name1 ^ name2 )  # {'yuan', 'yua', 'fa', 'wei'}


# 手动输入一些字符串与自行定义的字符串进行对比

ins=[]b=set(['1','2','3','4','5'])
while True:
    a=input("测试: ")
    if a == "q":
        break
    ins.append(a)

ins=set(ins)

print(ins > b )

5.3 函数:

5.3.1、概念

作用:

1、减少重复代码

2、方便修改,易扩展

3、保持代码一致性

命名规则

函数名必须是下划线或字母开头, 可以包含任意字母、数字或下划线的组合, 不能使用任何标点符号

函数名是不区分大小写的;

函数名不能是保留字。


5.3.2、创建

def f(): # def是define简称  f()表示函数名  ()可以用来传递参数

print (" hello world ")   # 函数体,下面所有代码都属于 f 这个函数


f()# 调用函数, 不加(), 直接用f那么它就表示成了一个变量

5.3.3、参数 

# 注意:1、形参有多少个,实参就得定义多少个

2、调用时候需要严格区分大小写

3、默写参数一定要跟在其它参数后面

4、不定长参数, 固定格式: (*args无命名参数放左边,**kwargs 有命名参数放右边),如果有默认参数放左边


# 必须参数(关键字参数): 必须参数以正确顺序传入函数,调用时的数量必须和声明时的一样

def add(x,y):# add(x,y) 形参

print (x+y)

def(3,5)# 实参


def test1(name,age):

    print("Name: %s" % name )

    print("Age: %d" % age )


test1("xiong",123)


打印结果: Name: xiong

   Age: 123


# 默认参数:

def test1(name,age,sex="man"):

    print("Name: %s" % name )

    print("Age: %d" % age )

    print("Sex: %s " % sex )


test1("xiong",123)

打印结果: Name: xiong

   Age: 123

   Sex: man 


# 不定长参数:(*args)    # args可以自行命名   *表示不定长参数   

(*arges):   无命名参数   # 保存至args时为元组

(**kwargs): 有命名参数 # 保存至kwargs时为字典

def test2(*args):    print(args)test2(1,2,3,4,5,6)# 打印结果为: (1, 2, 3, 4, 5, 6)

##################### 示例2 #####################

def test3(**kwargs):    print(kwargs)test3(name="xiong",age=123,sex="man") # 打印结果: {'name': 'xiong', 'age': 123, 'sex': 'man'}

##################### 示例3 #####################

def test3(**kwargs):    for te in kwargs:        print(te,":",kwargs[te])        test3(name="xiong",age=123,sex="man")# 打印结果: name : xiong age : 123 sex : man

##################### 示例4 #####################

def test4(*args,**kwargs):    print(args,kwargs)test4(1,2,3,4,name="xiong",age=123,sex="man")# 打印结果: (1, 2, 3, 4) {'name': 'xiong', 'age': 123, 'sex': 'man'}

##################### 错误――示例5 #####################

def test4(name,sex="man",*args,**kwargs):    print(name,sex,args,kwargs)test4(name="xiong",sex="man",1,2,3,4,age=123)# 打印结果: SyntaxError: positional argument follows keyword argument


# 优先级: def 函数名(关键参数,默认参数,无命名参数,有命名参数)

#示例  def test(te1,age='male',123,job='IT')


#########  当中间有一个默认值的时候,如果不指定它还是会打印出错,

def test4(name,sex="man",*args,**kwargs):    print(name,sex,args,kwargs)test4("xiong",1,2,3,4,age=123)

5.3.4、函数的reture

作用: 1、结束函数

   2、返回某个对象


注意点: 1、 函数里如果没有return,会默认返回一个None

2、 如果return有多个对象,那么python会帮我们把多个对象封装成一个元组返回


5.3.5、定义域

函数是有自己的定义域的,IF是没有的

作用域分四种情况: LEGB

L:local,局部作用域,即函数中定义的变量;

E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;

G:globa,全局变量,就是模块级别定义的变量;

B:built-in,系统固定模块里面的变量,比如int, bytearray等。 搜索变量的优先级顺序依次是:作用域局部>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB


外层 built-in --> global 全局作用域 --> enclosing 局部作用域 --> local 局部作用域


局部变量不能修改全局变量

局部要想改变全局变量需要增加一个global 变量

如果是在enclosing那就需要增加一个nonlocal 变量名称 


模块: 取出当前时间

import time

time_format = '%Y-%m-%d %X'

times = time.strftime(time_format)

print(times)


#  功能,设置一个函数时间,将其保存到测试文件中,将打印start funcation 到屏幕上

#!/usr/bin/env python# -*- coding:utf-8 -*-def logger(n):    import time    time_format = "%Y-%m-%d %X"    times = time.strftime(time_format)    with open("测试文件",'a',encoding='utf-8') as f:        f.write("%s funcation1 %s \n" %(times,n) )def fun1(n):    print("start funcation 1 ")    logger(n)fun1(1)# 打印结果打开测试文件  2017-09-12 14:13:33 funcation1 1  #   %s  times                      %s  n    函数形参的参数

# 实现不定长函数的加法

def test2(*args):    number = 0    for i in args:        number += i    print(number)test2(1,2,3,4,5,6)# 传递一堆整型给test2函数, 保存至args是元组格式,使用for循环叠加


本文出自 “xiong” 博客,请务必保留此出处http://xiong51.blog.51cto.com/5239058/1964772