设为首页 收藏本站
查看: 1433|回复: 0

[经验分享] Python基础-第三天

[复制链接]

尚未签到

发表于 2018-8-15 06:09:45 | 显示全部楼层 |阅读模式
  本篇内容:
  1.集合(set)
  2.文件操作
  3.字符编码与转码
  4.函数
  一、集合(set)
  1.集合的特点
  集合是一个无序的、不重复的数据组合,它的主要作用如下:
  ●去重,把列表变成集合后,自动会去重;
  ●关系测试,测试两组数据之间的交集、并集、差集、子集、父集、对称差集;
  2.集合的定义
  ①直接定义
>>> set_name = set([1, 1, 2, "a", "a", "b"])  

  
>>> print(set_name)
  
{1, 2, 'b', 'a'}
  

  
>>> print(type(set_name))
  
<class 'set'>
  ②将列表转集合
>>> list_1 = [1, 2, 3, 4, 5, 1]  

  
>>> set_1 = set(list_1)
  

  
>>> print(set_1, type(set_1))
  
{1, 2, 3, 4, 5} <class 'set'>
  3.关系测试
  ①交集:即属于集合1也属于集合2的元素
>>> set_1 = set([1, 2, "a", "b"])  

  
>>> set_2 = set([2, 3, "b", "c"])
  

  
>>> print(set_1.intersection(set_2))
  
{'b', 2}
  

  
>>> print(set_1 & set_2)  # 使用运算符求交集
  
{'b', 2}
  ②并集:集合1的元素加上集合2的元素,重复元素只算做一个
>>> set_1 = set([1, 2, "a", "b"])  

  
>>> set_2 = set([2, 3, "b", "c"])
  

  
>>> print(set_1.union(set_2))
  
{1, 3, 2, 'a', 'c', 'b'}
  

  
>>> print(set_1 | set_2)  # 使用运算符求并集
  
{1, 2, 3, 'c', 'a', 'b'}
  ③差集
>>> set_1 = set([1, 2, "a", "b"])  

  
>>> set_2 = set([2, 3, "b", "c"])
  

  
>>> print(set_1.difference(set_2))  # 属于集合1且不属于集合2的元素
  
{1, 'a'}
  

  
>>> print(set_1 - set_2)  # 使用运算符求属于集合1且不属于集合2的元素
  
{1, 'a'}
  

  
>>> print(set_2.difference(set_1))  # 属于集合2且不属于集合1的元素
  
{'c', 3}
  

  
>>> print(set_2 - set_1)  # 使用运算符求属于集合2且不属于集合1的元素
  
{'c', 3}
  ④判断是否为子集或父集关系
>>> set_1 = set([1, "a"])  

  
>>> set_2 = set([1, "b"])
  

  
>>> set_3 = set([1, 2, "a"])
  

  
>>> print(set_1.issubset(set_3))  # 判断集合1是不是集合3的子集
  
True
  

  
>>> print(set_2.issubset(set_3))  # 判断集合2是不是集合3的子集
  
False
  

  
>>> print(set_3.issuperset(set_1))  # 判断集合3是不是集合1的父集
  
True
  

  
>>> print(set_3.issuperset(set_2))  # 判断集合3是不是集合2的父集
  
False
  ⑤对称差集:集合1所有的元素加上集合2所有的元素,但不包含两个集合的交集
>>> set_1 = set([1, 2, "a", "b"])  

  
>>> set_2 = set([1, 3, "a", "c"])
  

  
>>> print(set_1.symmetric_difference(set_2))
  
{2, 3, 'c', 'b'}
  

  
>>> print(set_1 ^ set_2)  # 使用运算符求对称差集
  
{2, 3, 'c', 'b'}
  ⑥判断有没有交集
>>> set_1 = set([1, "a"])  

  
>>> set_2 = set(["b"])
  

  
>>> set_3 = set([1, 2, "a"])
  

  
>>> print(set_1.isdisjoint(set_3))  # 此处注意,当有交集则返回False
  
False
  

  
>>> print(set_3.isdisjoint(set_1))
  
False
  

  
>>> print(set_2.isdisjoint(set_3))  # 此处注意,当没有交集则返回True
  
True
  4.集合的修改
  ①添加
>>> set_1 = set([1, "a"])  

  
>>> set_1.add(2)  # 添加一项内容
  

  
>>> set_1.add("b")
  

  
>>> set_1.update([3, 4, "c", "d"])  # 添加多项内容
  

  
>>> print(set_1)
  
{1, 2, 3, 4, 'c', 'd', 'b', 'a'}
  ②删除
>>> set_1 = set([1, 2, "a", "b"])  

  
>>> set_1.remove(1)  # 指定删除1元素
  

  
>>> print(set_1.pop())  # 随意删除一个元素,并显示出删除的元素
  
2
  

  
>>> set_1.discard("c")  # discard与remove不同的是,当discard指定的元素不存在时,不会报错
  

  
>>> print(set_1)
  
{'b', 'a'}
  二、文件操作
  1.对文件的操作流程
  ●打开文件,得到文件句柄并赋值给一个变量
  ●通过文件句柄对文件进行操作
  ●关闭文件
  2.打开文件的方法
  ①对单一文件操作的语法格式:(通过此方法打开文件后,一定要关闭文件,不然就一直占用内存)
>>> 文件句柄 = open("文件名", "打开文件模式", encoding="打开文件的字符编码")  
>>> 代码
  
>>> 文件句柄.close
  ②对单一文件操作的语法格式:(推荐写法,当with代码块执行完后,文件自动关闭了)
>>> with open("文件名", "打开文件模式", encoding="打开文件的字符编码") as 文件句柄:  
>>>     with代码块
  ③对多个文件操作的语法格式:
>>> with open("文件名1", "打开文件模式", encoding="打开文件的字符编码") as 文件句柄1, \  
            open("文件名2", "打开文件模式", encoding="打开文件的字符编码") as 文件句柄2:
  
>>>     with代码块
  注:
  ●文件句柄是打开文件的内存对象,一般用f表示。文件句柄包括:文件名、字符集、文件大小、文件在硬盘上的起始位置等;
  ●文件名部分可以使用相对路径或绝对路径加文件名方式表示;
  ●打开文件模式有:
  r:只读模式,没有写明打开文件模式时默认是以只读方式打开;
  w:只写模式。当文件不存在时会创建文件,存在时会擦掉文件中的内容;
  a:追加模式,不能读。当文件不存在时会创建文件,存在时不会擦掉文件中的内容。往文件中写内容时,是追加写。
  r+:读写模式。当文件不存在时会报错;
  w+:写读模式。当文件不存在时会创建文件,存在时会擦掉文件中的内容;
  a+:追加读模式。当文件不存在时会创建文件,存在时不会擦掉文件中的内容。往文件中写内容时,是追加写。
  ●打开文件的字符编码:Python的默认字符编码是Unicode,所以用utf-8字符编码打开文件。
  3.读取文件内容
  ①文件指针
  打开一个文件后,文件指针在文件最开头,读完整个文件后,文件指针停留在文件内容末尾处,可以理解成光标。
>>> print(文件句柄.tell())  # 打印出文件指针的位置  

  
# 移动文件指针。例如number位5时,表示将文件指针移送到文件内容开始处往后第5个字符处
  
>>> 文件句柄.seek(number)
  ②读取文件所有内容,或指定数量字符
>>> print(文件句柄.read())  # 读取文件中的所有内容。当文件太大时,有可能会撑爆内存。  

  
>>> print(文件句柄.read(5))  # 只读取5个字符。
  ③按行读取,只读取一行
>>> print(文件句柄.readline())  ④将文件所有内容变成列表,每一行为列表的一个元素
>>> print(文件句柄.readlines())  注:当文件太大时,有可能会撑爆内存。
  ⑤读文件的推荐做法
>>> for line in 文件句柄:  
        print(line)
  注:读取文件所有内容,但内次只读取一行内容,当读取新的一行时,会覆盖之前的一行的内容,从而降低了内存的占用率,效率高。
  4.往文件中写内容
>>> 文件句柄.write("内容")  5.关闭文件
>>> 文件句柄.close()  

  
>>> 文件句柄.closed  # 判断文件是否关闭,已关闭则返回True,未关闭则返回False。
  三、字符编码与转码
  1.Python 2.X版本中字符编码转换方法
DSC0000.png

#-*-coding:utf-8-*-  

  
>>> import sys
  
>>> print(sys.getdefaultencoding())  # 显示出python默认使用的字符编码
  

  
>>> variable = "你好"
  

  
# 从utf-8解码(decode)成unicode,要告诉unicode当前使用的字符编码是utf-8
  
>>> utf8_to_unicode = variable.decode("utf-8")
  

  
# 从unicode编码(encode)成GBK,要告诉unicode想要转的字符编码是gbk
  
>>> unicode_to_gbk = utf8_to_unicode.encode("gbk")
  2.Python 3.X版本中字符编码转换方法
# 注意,Python 3.X版本中,不管文件开头声明的字符编码是什么,变量使用的字符编码为unicode  
>>> variable = "你好"
  

  
# 转成gbk字符编码
  
# 注意的是,Python 3.X版本多了个bytes类型,encode编码时str类型会转成bytes类型
  
>>> unicode_to_gbk = variable.encode("gbk")
  

  
# 通过decode编码,将bytes类型转成str类型,同时字符编码也转成了unicode
  
>>> gbk_to_unicode = unicode_to_gbk.decode("gbk")
  四、函数
  1.函数是什么
  定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,调用函数名即执行了这个函数。
  函数的特性:
  ●减少重复代码
  ●使程序变的可扩展
  ●使程序变的易维护
  2.定义函数
>>> def function():  # 函数名  
        """函数的功能描述"""
  
        代码快
  
        return 返回值
  

  
>>> function()  # 调用函数
  传递参数和接收返回值:
>>> def function(x):  
        """This is a test function"""
  
        print(x)
  
        return 0  # 定义返回值为数字0
  

  
# 将函数的返回值赋给变量variable
  
# 调用函数时,传递的参数是数字1
  
>>> variable = function(1)
  

  
>>> print(variable)
  
1
  
0
  3.函数的参数
  形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量
  实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值
DSC0001.png

  ①位置参数
>>> def function(x, y):  
        """This is a test function"""
  
        print(x)
  
        print(y)
  
        return 0
  

  
>>> function(1, 2)
  
1
  
2
  形参和实参是从左到右一一对应,个数不能多不能少
  ②关键参数
  只有关键参数:
>>> def function(x, y):  
        """This is a test function"""
  
        print(x)
  
        print(y)
  
        return 0
  

  
>>> function(y=1, x=2)  # 顺序可以颠倒
  
2
  
1
  和位置参数混用:
>>> def function(x, y, z):  
        """This is a test function"""
  
        print(x)
  
        print(y)
  
        print(z)
  
        return 0
  

  
>>> function(4, z=6, y=5)  # 关键参数要放在位置参数后面
  
4
  
5
  
6
  ③默认参数
>>> def function1(x, y, z=3):  # 注意,默认参数要写在最后面  
        """This is a test function1"""
  
        print("这是函数一", x)
  
        print("这是函数一", y)
  
        print("这是函数一", z)
  
        return 0
  

  
# 默认函数不是必须得传递值,如果没有传递值时那就为默认值,传递值了就用传递的值
  
>>> function1(1, y=2)
  
这是函数一 1
  
这是函数一 2
  
这是函数一 3
  

  

  
>>> def function2(x, y=7, z=8):
  
        """This is a test function2"""
  
        print("这是函数二", x)
  
        print("这是函数二", y)
  
        print("这是函数二", z)
  
        return 0
  

  
# 通过位置参数和关键参数都可以传递值
  
>>> function2(4, 5, z=6)
  
这是函数二 4
  
这是函数二 5
  
这是函数二 6
  ④上面的位置参数、关键参数、默认参数它们的实参数目不能比形参数目多。当实参数目不固定时,就要使用非固定参数,即参数组定义形参。
  ●*args
>>> def function(x, y="a", *args):  # *args要放在默认参数后面  
        """This is a test function"""
  
        print(x)
  
        print(y)
  
        print(args)
  
        return 0
  

  
# *args只能接收位置参数
  
# 多传递部分的参数,会变成一个元组
  
>>> function("d", 2, 3, 4, 5, [6, 7, 8])
  
d
  
2
  
(3, 4, 5, [6, 7, 8])
  ●**kwargs
>>> def function(x, y, z=10, *args, **kwargs):  # **kwargs要放在*args后面  
        """This is a test function"""
  
        print("这是函数七", x)
  
        print("这是函数七", y)
  
        print("这是函数七", z)
  
        print("这是函数七", args)
  
        print("这是函数七", kwargs)
  
        return 0
  

  
# **kwargs只能接收关键参数
  
# 多传递部分参数,会变成一个字典
  
>>> function(1, 2, 3, 4, 5, name="zl", age=26)
  
1
  
2
  
3
  
(4, 5)
  
{'name': 'zl', 'age': 26}
  4.函数的返回值
  ①返回值的类型和数量
  ●返回值可以是任意的数据类型,例如数字、字符串、列表、字典等等都行。
  ●如果return后面没有定义返回值时,默认返回None。
  ●当return后面定义的返回值有多个时,会把所有的值放进元组中并返回。
  5.全局变量和局部变量
  ①什么是全局变量和局部变量,以及他们的作用域
  ●在函数中定义的变量称为局部变量,在程序的顶层(也可以理解为第一级)定义的变量称为全局变量。
  ●全局变量作用域是整个程序,局部变量作用域是定义该变量的函数。
  ●当全局变量与局部变量同名时:在定义局部变量的函数内,局部变量起作用。在其它地方全局变量起作用。
  例子:
>>> name = "xiaoming"  

  

  
>>> def function(name):
  
        """This is a test function"""
  
        print(name)
  
        name = "xiaohong"
  
        print(name)
  
        return 0
  

  
>>> function(name)
  
xiaoming
  
xiaohong
  

  
>>> print(name)
  
xiaoming
  ②函数内使用global修改全局变量内容(知道有这么个东西就行,不建议这样干)
>>> name = "xiaoming"  

  

  
>>> def function():
  
        """This is a test function"""
  
        global name
  
        name = "xiaohong"
  
        print(name)
  
        return 0
  

  
>>> print(name)
  
xiaoming
  

  
>>> function()
  
xiaohong
  

  
>>> print(name)
  
xiaohong
  ③在函数内修改列表内容
>>> variable = [1, 2, "a", 'b']  

  

  
>>> def function():
  
        """This is a test function"""
  
        print(variable)
  
        variable[0] = 3
  
        variable[1] = 4
  
        return 0
  

  
>>> function()
  
[1, 2, 'a', 'b']
  

  
>>> print(variable)
  
[3, 4, 'a', 'b']
  ●变量内容为字符串、整数的数据类型,在不使用global情况下,更改局部变量后,全局变量不会改变。
  ●变量内容为列表、字典、集合、类,在不使用global情况下,更改局部变量后,全局变量也跟着改变。
  6.递归函数
  ①什么是递归函数
  如果一个函数在内部调用自身本身,这个函数就是递归函数。
  ②递归函数的特点
  ●必须有一个明确的结束条件,最大的递归次数是999次;
  ●每次进入更深一层递归时,问题规模相比上次递归都应有所减少。
  ●递归效率不高
  ③例子
>>> def calc(n):  
        print(n)
  
        if n > 0:
  
            return calc(int(n/2))
  
        print("函数结束,此时n的值为:%s" % n)
  

  
>>> calc(10)
  
10
  
5
  
2
  
1
  
0
  
函数结束,此时n的值为:0
  7.高阶函数
  ①什么是高阶函数
  一个函数可以接收另一个函数作为参数,这种函数就称之为高阶函数。
  ②例子
>>> def add(x, y, z):  
        return z(x) + z(y)
  

  
>>> result = add(3, -6, abs)
  

  
>>> print(result)
  
9

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-551846-1-1.html 上篇帖子: python 条件语句、循环语句 下篇帖子: python 脚本函数传递参数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表