python基础学习第五天

文章目录:

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循环叠加
时间: 2024-10-25 16:30:20

python基础学习第五天的相关文章

Python基础学习(五)

Python面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的. 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公用的.类变量定义在类中且在函数体之外.类变量通常不作为实例变量使用. 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据. 方法重写:如果从父类继承的方法不能满足子类的需求,可以

Python基础学习五

Python基础学习五 迭代 for x in 变量: 其中变量可以是字符串.列表.字典.集合. 当迭代字典时,通过字典的内置函数value()可以迭代出值:通过字典的内置函数items()可以迭代出键值对. for key in dict: #迭代键 for val in dict.value(): #迭代值 for k,v in dict.items(): #迭代键值对 当迭代列表时,通过内置函数enumerate()可以迭代出索引加值. for i in list #迭代列表 for i

Python基础学习(十)

Python I/O模型 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 概念说明 在进行解释之前,首先要说明几个概念: 用户空间和内核空间 进程切换 进程的阻塞 文件描述符 缓存 I/O 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方).操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件

python基础学习09(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #什么是函数 #就是引用,创建,使用 #例子 def foo(): print '233' foo() #返回与函数类型 def foo1():#是一个过程 print 'hello world!' foo1() foo

Python基础学习 总结篇

Python基础学习总结 先附上所有的章节: Python学习(一)安装.环境配置及IDE推荐 Python学习(二)Python 简介 Python学习(三)流程控制 Python学习(四)数据结构(概要) Python学习(四)数据结构 —— int float Python学习(四)数据结构 —— str Python学习(四)数据结构 —— bool Python学习(四)数据结构 —— list tuple range Python学习(四)数据结构 —— set frozenset

python基础学习2

python中的运算符 1.算术运算符:用来做算术运算的符号 ①.+ :求和,也可以做连接符 ②. - :求差 ③. * : 求积 ④. / :求商 ⑤.% :取余 ⑥.//  :取整 ⑦.**  :次方 注意:只能是数值 print(3*3) #求积结果:9 print(9/2) #相除结果:4.5 print(3**4) #3的4次方,结果:81 print(9//4) #小数部分直接丢掉,取整结果:2 print(13%3) #取余结果:1 运行结果是 9 4.5 81 2 1 比较运算符

python基础学习日志day5-各模块文章导航

python基础学习日志day5---模块使用 http://www.cnblogs.com/lixiang1013/p/6832475.html python基础学习日志day5---time和datetime模块 http://www.cnblogs.com/lixiang1013/p/6848245.html python基础学习日志day5---random模块http://www.cnblogs.com/lixiang1013/p/6849162.html python基础学习日志da

Python 基础学习 网络小爬虫

<span style="font-size:18px;"># # 百度贴吧图片网络小爬虫 # import re import urllib def getHtml(url): page = urllib.urlopen(url) html = page.read() return html def getImg(html): reg = r'src="(.+?\.jpg)" pic_ext' imgre = re.compile(reg) imgli

python基础学习05(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #dict{键:值} #哈希 #注:字典是无顺序的,所以你懂的 #创建与赋值 dict1={} dict2={'name':'apply','avg':24,'sex':'man'} print dict1,dict2