python初识 - day4

一、集合(set)

  1.集合的定义

    set 是一个无序的元素集合,支持并、交、差及对称差等数学运算, 但由于 set 不记录元素位置,

  因此不支持索引、分片等类序列的操作。

  2.集合的创建

    大括号或 set() 函数可以用来创建集合。 注意:想要创建空集合,你必须使用set() 而不是 {} 。

   {}用于创建空字典   

    

1 list = [1,3,2,4,2,5,7]
2 list = set(list) #将列表转成集合,集合用{}表示
3 print(list,type(list))#输出结果为:{1, 2, 3, 4, 5, 7} <class ‘set‘>
4 list2 = set([3,22,5,66,8,10])
5 print(list2,type(list2))#输出结果为:{66, 3, 5, 8, 10, 22} <class ‘set‘>

  3.集合的添加和删除 

    

 1 list5 = {1,22,3}
 2 list5.add(33) #添加
 3 print(list5)#输出:{1,3,33,22}
 4 list5.update([0,4,44]) #添加多项
 5 print(list5)#输出:{0, 1, 33, 3, 4, 44, 22}
 6
 7 list5.remove(44) #移除一项
 8 print(list5)#输出:{0, 1, 33, 3, 4, 22}
 9 print(list5.pop())#随机删除
10 print(list5.discard(99))#删除,不存在时返回None,输出:None

  4.集合的长度

    

1 list = {0, 1, 33, 3, 4, 22}
2 print(len(list))#集合长度,#输出:6

  5.集合成员的判断

    

1 list = {0, 1, 33, 3, 4, 22}
2 print(99 in list) #判断其是否为集合成员,输出:False
3 print(99 not in list) #判断其是否非集合成员,输出:True

  6.集合间的关系

    集合间的关系包括交、差、并集,子集,对称差集,空集。

    

 1 list = set( [1,3,2,4,2,5,7])
 2 list2 = set([3,22,5,66,8,10])
 3
 4 #交集
 5 print(list.intersection(list2))#intersection意为交集,结果为{3, 5}
 6 print(list & list2)#结果为{3, 5}
 7
 8 #并集
 9 print(list.union(list2))#union意为联合,结果为{1, 2, 3, 4, 5, 66, 7, 8, 10, 22}
10 print(list | list2) #结果同上
11
12 #差集(一方独有的,另一方无的集合)
13 print(list.difference(list2))#输出:{1, 2, 4, 7}
14 print(list - list2)#输出:{1, 2, 4, 7}
15 print(list2.difference(list))#输出:{8, 66, 10, 22}
16
17 #子集  issubset用于判断一个集合的所有元素是否都包含于另一个集合
18 list3 = set([1,3,5])
19 print(list.issubset(list3))#输出:False,即list不是list3的子集
20 print(list3.issubset(list))#输出:True,即list3是list的子集
21 print(list<= list2)#判断list是否为list2的子集
22
23 #对称差集(等同于两差集之和)
24 print(list.symmetric_difference(list2))#输出:{1, 66, 2, 7, 22, 4, 8, 10}
25 print(list ^ list2) #结果同上
26
27 #空集,若两个列表无交集,返回True,有交集返回False
28 list4 = set([0,11,33])
29 print(list3.isdisjoint(list4))#输出:True,即两个列表无交集
30 print(list.isdisjoint(list2))#输出:False,两个列表有交集

二、文件常用操作

  1. 文件的创建删除和重命名

    

1 import os
2 os.mknod("test.txt")             #创建空文件
3 fp = open("test.txt",w)          #直接打开一个文件,如果文件不存在则创建文件
4 os.remove()                         #  函数用来删除一个文件
5 os.rename(old, new)         #重命名
6 os.path.getsize(filename)        #获取文件大小

  2.目录的创建删除和重命名

    

1 import os,shutil
2 os.mkdir("file")                   #创建目录
3 os.makedirs(r“c:\python\test”)#创建多级目录
4 os.rename("oldname","newname")   #重命名文件(目录)文件或目录都是使用这条命令
5 os.rmdir("dir")                             #只能删除空目录
6 shutil.rmtree("dir")                        #空目录、有内容的目录都可以删
7 os.chdir("path")                            #转换目录,换路径
8 shutil.copytree("olddir","newdir")  #olddir和newdir都只能是目录,且newdir必须不存在
9 shutil.move("oldpos","newpos")       #移动文件(目录)

  3.文件的读写操作(较繁多,以举例子的方式说明)

    

 1 f1 = open(‘faded‘,‘r‘,encoding=‘utf-8‘) #文件句柄(文件的内存对象,包括文件的起始位置,文件名,字符集等),faded为已创建的文件
 2 print(f1.read()) #只读
 3 for i in range(10): #打印前10行
 4     print(f1.readline().strip()) #每次打印一行,去除空格和换行
 5
 6 f2= open(‘faded2‘,‘w‘,encoding=‘utf-8‘) #只写
 7 f2.write(‘You were the shadow to my light\n你是我生命之光中的一道暗影\nDid you feel us\n你能理解我们吗‘)
 8
 9 f2= open(‘faded2‘,‘a‘,encoding=‘utf-8‘)#‘a‘即 append,追加
10 f2.write(‘\nAnother star\n另一颗行星\nYou fade away\n你逐渐消失‘)
11 #f1.close() #关闭
12 f2.close()
13
14 print(f1.tell())#表示开头位置,结果为:0
15 print(f1.readline()) #打印一行
16 print(f1.tell()) #打印此时光标的位置,结果为:31
17 print(f1.readline()) #打印一行,结果为:You were the shadow to my light
18 print(f1.tell())#打印此时光标的位置,结果为:64
19 print(f1.seek(31))#打印光标返回的位置,结果为:31
20 print(f1.readline())#结果为:You were the shadow to my light
21
22 print(f1.encoding)#打印编码格式,结果为:utf-8
23
24 #print(f2.flush())#实时刷新,无此方法时缓存满了一次刷新到硬盘中
25
26
27 # f2= open(‘faded2‘,‘a‘,encoding=‘utf-8‘)
28 # print(f2.truncate(20))#truncate意为把...截短,此处指从头开始截取20个字符
29 ‘‘‘
30 f2= open(‘faded2‘,‘r+‘,encoding=‘utf-8‘)#文件句柄,读写(可读可写)
31 print(f2.readline())
32 print(f2.readline())
33 f2.write(‘\nqwertyuiop\n‘)
34 f2.write(‘asdfghjkl‘)
35 print(f2.readline())
36 ‘‘‘
37 ‘‘‘
38 f3= open(‘faded3‘,‘w+‘,encoding=‘utf-8‘)#文件句柄,写读
39 f3.write(‘Another dream\n‘)
40 f3.write(‘另外的梦想\n‘)
41 print(f3.tell())
42 print(f3.seek(0))
43 print(f3.readline())
44 ‘‘‘
45 f2= open(‘faded2‘,‘a+‘,encoding=‘utf-8‘)#文件句柄,追加写读
46 f2.write(‘\nWhere are you now\n‘)
47 print(f2.tell())
48 print(f2.seek(0))
49 print(f2.readline())
50 f2.write(‘Another dream\n‘)
51 print(f2.tell())
52 ‘‘‘
53
54 f2= open(‘faded2‘,‘rb‘)#文件句柄,读,二进制文件(文件传输)
55 print(f2.readline()) #输出:b‘Another dream\r\n‘
56 print(f2.readline()) #输出:b‘\xe5\x8f\xa6\xe5\xa4\x96\xe7\x9a\x84\xe6\xa2\xa6\xe6\x83\xb3\r\n‘
57 ‘‘‘
58 ‘‘‘
59 f2= open(‘faded2‘,‘wb‘)#文件句柄,写,二进制文件(文件传输)
60 f2.write(‘Hello python\n‘.encode())#默认utf -8
61 f2.write(‘Hello python\n‘.encode())#默认utf -8
62 f2.close()
63 ‘‘‘
64    

  4.关于flush(刷新)的一个例子

    

1 import  sys,time
2 for i in range(60):
3     sys.stdout.write(‘*‘)
4     sys.stdout.flush()
5     time.sleep(0.2)

三、字符编码格式的转换  

    

 1 #-*- coding:utf-8 -*- 文件编码
 2 str = ‘我们不忘初心‘
 3 print(str,type(str))#输出:我们不忘初心 <class ‘str‘>
 4 str_utf_gbk = str.encode(‘gbk‘)#encode表编码,unicode转utf-8或gbk要用encode,而utf-8和gbk转unicode要用decode
 5 print(str_utf_gbk,type(str_utf_gbk))#输出:b‘\xce\xd2\xc3\xc7\xb2\xbb\xcd\xfc\xb3\xf5\xd0\xc4‘ <class ‘bytes‘>
 6 print(str_utf_gbk .decode(‘gbk‘))#输出:我们不忘初心(byte->string,decode意为解码)
 7
 8 str2 = ‘我们直面未来‘
 9 #utf-8无需向Unicode转码,直接用encode+最终编码格式即可转为gbk或utf-8
10 print(str2.encode(‘gbk‘),type(str2.encode(‘gbk‘)))#输出:b‘\xce\xd2\xc3\xc7\xd6\xb1\xc3\xe6\xce\xb4\xc0\xb4‘ <class ‘bytes‘>
11 print(str.encode(‘utf-8‘),type(str.encode(‘utf-8‘)))#输出:b‘\xe6\x88\x91\xe4\xbb\xac\xe4\xb8\x8d\xe5\xbf\x98\xe5\x88\x9d\xe5\xbf\x83‘ <class ‘bytes‘>
12
13 utf_gbk = str2.encode(‘gbk‘)#此处无decode方法,用encode(‘gbk‘)即可转为gbk编码
14 print(utf_gbk)#输出:b‘\xce\xd2\xc3\xc7\xd6\xb1\xc3\xe6\xce\xb4\xc0\xb4‘
15
16 byte_string = utf_gbk.decode(‘gbk‘)
17 print(byte_string ,type(byte_string))#输出:我们直面未来 <class ‘str‘>
18
19 gbk_utf = utf_gbk.decode(‘gbk‘).encode(‘utf-8‘)
20 print(gbk_utf,type(gbk_utf)) #输出:b‘\xe6\x88\x91\xe4\xbb\xac\xe7\x9b\xb4\xe9\x9d\xa2\xe6\x9c\xaa\xe6\x9d\xa5‘

四、函数的简单入门

  1.函数的介绍  

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

    函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

  2.函数的定义

    你可以定义一个由自己想要功能的函数,以下是简单的规则:

      <1>函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()

      <2>任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。

      <3>函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。(虽非必需,但强烈建议写上少量说明文字)

      <4>函数内容以冒号起始,并且缩进。

      <5>return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

      <6>用例子说明:

        

 1 import time
 2 #f1 = open(‘notebook‘,‘r‘,encoding = ‘utf-8‘)
 3 #函数的好处:代码重用;保持一致性;可扩展性
 4 def add():
 5     ‘‘‘文本追加内容并添加日志时间‘‘‘
 6     time_formate = ‘%y-%m-%d %x‘ #时间的格式
 7     time_current = time.strftime(time_formate)#引用上述的时间格式
 8     with open(‘notebook.txt‘,‘a+‘,encoding=‘utf-8‘) as f:
 9         f.write(‘Time is %s go on\n‘%time_current)
10
11 def test1():
12     ‘‘‘日志一‘‘‘
13     print(‘This is test1‘)
14     add()
15
16 def test2():
17     ‘‘‘日志二‘‘‘
18     print(‘This is test2‘)
19     add()
20
21 def test3():
22     ‘‘‘日志三‘‘‘
23     print(‘This is test3‘)
24     add()
25
26 test1()
27 test2()
28 test3()

  3.函数参数及调用   

    

 1 ‘‘‘
 2 #return 返回值
 3 def test1():
 4     print(‘test 1‘)
 5
 6 def test2():
 7     print(‘test 2‘)
 8     return 0
 9
10 def test3():
11     print(‘test 3‘)
12     return 1,‘hello‘,[‘hello‘,‘world‘],{‘China‘:‘big‘}
13
14 t1 = test1()
15 t2 = test2()
16 t3 = test3()
17 print(t1,type(t1)) #运行结果:None<class ‘NoneType‘> 返回值为None
18 print(t2,type(t2)) #运行结果:0 <class ‘int‘> 返回值为 0
19 print(t3,type(t3)) #运行结果:(1, ‘hello‘, [‘hello‘, ‘world‘], {‘China‘: ‘big‘}) <class ‘tuple‘> 返回值为 一个元组
20 ‘‘‘
21 #关键字调用与标准调用
22 def test(x,y,z):
23     print(x)
24     print(y)
25     print(z)
26
27 #test(y=1,x=1)#关键字调用,与形参(位置参数)顺序无关
28 #test(2,1)#标准调用与形参一一对应
29 #test(x=3,2,z=4,)  #报错,关键字调用不能在标准调用之前
30 test(2,z=4,y=3) #两者一起使用,输出结果:2 3 4

  4.函数非固定传参

    

 1 #默认参数
 2 def test4(x,y=1):  #y=1为默认参数,且必须在形参之后,即(x=1,y)报错
 3     print(x,y)
 4 #test4(2)#输出结果:2 1
 5 test4(3,4)#输出结果:3 4
 6 #默认参数的特点:调用参数时,默认参数非必须传递
 7 #用途:默认安装值;
 8
 9 #参数组(* 参数组名字),接受N个位置参数,转换成元组的形式
10 def test1(x,*args):  #形参数目不固定时,用*args接受
11     print(x)
12     print(args)
13
14 test1(0,3,5,6,6) #输出:0   (3,5,6,6)
15 test1(*[1,2,4,5,5])# 传递列表,输出:1  (2,4,5,5)
16
17 #字典的传递(**kwargs),接受N个关键字参数,转换成字典的形式
18 def test2(**kwargs):
19     print(kwargs)
20     print(kwargs[‘name‘])
21     print(kwargs[‘sex‘])
22
23 test2(name=‘hyt‘,age=18,sex=‘girl‘) #输出:{‘age‘: 18, ‘sex‘: ‘girl‘, ‘name‘: ‘hyt‘}
24 test2(**{‘name‘:‘sc‘,‘age‘:‘20‘,‘sex‘:‘boy‘})#输出同上
25
26 #默认函数,参数组,字典同时传递
27 def test3(name,age=19,*args,**kwargs):
28     print(name) #输出一:hyt    输出二:sc
29     print(age) #输出一:18      输出二:20
30     print(args) #输出一:((‘sex‘, ‘girl‘), {‘game‘: ‘yys‘})  输出二:()
31     print(kwargs)#输出一:{}    输出二:{‘game‘: ‘lol‘, ‘sex‘: ‘boy‘}
32
33 test3(‘hyt‘,18,(‘sex‘,‘girl‘),{‘game‘:‘yys‘})#测试一,关键字参数必须在位置参数之后
34 test3(‘sc‘,20,sex=‘boy‘,game=‘lol‘) #测试二,关键字参数必须在位置参数之后

  

  5.函数局部变量和作用域   

    <1>.在程序一开始定义的变量称为全局变量;在子程序中定义的变量称为局部变量。

    <2>全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。

      <3>当全局变量与局部变量重名时,在定义局部变量的子程序内,局部变量起作用,在其它地方全局变量起作用。   <4>下面用例子说明:

      

 1 school = ‘BeiDaQingNiao‘ #全局变量
 2 age = 18 #全局变量
 3 def change_age(age):
 4     #global school  #声明全局变量,已有此全局变量时则修改,没有则创建,但不建议使用!
 5     print(‘before_age:‘,age) #结果:before_age: 18
 6     school = ‘oldBoy‘
 7     age = 20  #局部变量,这个函数就是它的作用域
 8     print(‘after_age:‘,age) #结果:after_age: 20
 9     print(‘school_jubu:‘,school)
10
11 change_age(age)
12 print(age) #结果:18
13 print(‘school_quanju:‘,school)
14
15 #一般情况下,不能在修改函数里修改局部变量为全局变量,如数字,字符,字符串,但列表,字典,集合,类可以改
16 mes = [‘sc‘,‘boy‘,20]
17 def change_mes(mes):
18     mes[0] = ‘hyt‘
19     mes[1] = ‘girl‘
20     mes[2] = ‘18‘
21     print(‘change inside:‘,mes)  #输出结果:change inside: [‘hyt‘, ‘girl‘, ‘18‘]
22 change_mes(mes)
23 print(‘ouside:‘,mes)  #输出结果:ouside: [‘hyt‘, ‘girl‘, ‘18‘]

  6.函数递归和高阶函数

    <1>递归函数:在函数内部,可以调用其它函数,如果一个函数在内部调用自己本身,则称为递归函数。

    <2>递归的三个主要特性

      --->1.必须有一个明确的结束条件

      --->2.每次递归进入更深一层时,问题规模都应比上次递归有所减少

         --->3.递归的效率不高,递归层次过多会导致溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,       每当进如一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无线的,所以,      递归调用的次数过多,会导致栈溢出)

     <3>实例如下:     

      

1 def recur(n):
2     print(‘list:‘,n)
3     if int(n/2) > 0:
4         return recur(int(n/2)) #递归调用
5     print(‘the_last:‘,n) #输出:1
6 recur(12)

    

    <4>高阶函数:变量可以指向函数,函数的参数能接受变量,那么一个函数就可以接收另一个函数作为参数,

        这种函数就是高阶函数。   

      

1 def add(x,y,f):
2     return f(x)+f(y)
3 res = add(-4,-8,abs) #abs为参数的内置函数
4 print(‘the result:‘,res)#输出结果:the result: 12

 

  以上有部分内容摘自菜鸟教程,详情请戳http://www.runoob.com/python/python-functions.html

 

  

    

  

  

  

    

时间: 2024-10-21 23:08:29

python初识 - day4的相关文章

Python初识与简介【第一篇】

Python初识 由于是开篇,着实有点儿小激动......此处省略一万字,虽然写博客很伤脑细胞也费时费电,但大王说了,这是牛13的开始.    其实我接触Python的一个契机是在做Nagios监控的时候,发现了Python语言的强大,也可以实现高度的自动化,所以才开始慢慢的触及它,最近看到学好Python还可以成为全栈工程师,全栈是什么,就是什么都能做,能写后端.前端.GUI.科学运算.网络编程.大数据开发等等,掌握了这个工具利器,就有能力成为一名全栈程序员,想想都牛13,故心动不已. Pyt

[零基础学python]初识永远强大的函数

函数,对于人类来讲,能够发展到这个数学思维层次,是一个飞跃.可以说,它的提出,直接加快了现代科技和社会的发展,不论是现代的任何科技门类,乃至于经济学.政治学.社会学等,都已经普遍使用函数. 下面一段来自维基百科(在本教程中,大量的定义来自维基百科,因为它真的很百科):函数词条 [函数这个数学名词是莱布尼兹在1694年开始使用的,以描述曲线的一个相关量,如曲线的斜率或者曲线上的某一点.莱布尼兹所指的函数现在被称作可导函数,数学家之外的普通人一般接触到的函数即属此类.对于可导函数可以讨论它的极限和导

(一)python初识与变量

python初识 移步老男孩武sir文章(python2):http://www.cnblogs.com/wupeiqi/articles/5433925.html 武功sir文章列表(python2):http://www.cnblogs.com/wupeiqi/articles/5433893.html Centos6升级python2至python3:http://www.cnblogs.com/lyy-totoro/p/5603102.html 简单笔记如下: python的特点 可以写

Python - 初识Python

Python - 初识Python 认识开发语言 开发语言有高级语言的低级语言之分 低级语言: c, 混编, 属于机器码,编程中底层用的 实现效率低,执行效率高,对硬件的可控性强,目标代码小,可维护性差,可移植性差 高级语言: Python, Jave, PHP, C#, go.. 属于字符码,相比机器码跟接近于自然语言,好理解. 实现效率高,执行效率低,对硬件的可控性弱,目标代码大,可维护性好,可移植性好 解释型和编译型语言 首先Python 是一门解释型语言, 计算机是不能识别高级语言的,因

python初识-day2

1.模块初识 python中的库包括标准库和第三方库,需要使用时可直接导入,导入格式为"import  库模块",例如: 1 import sys #sys为python的标准库 2 print(sys.path) #打印环境变量 3 print(sys.argv) #打印相对路径 再如: 1 import os 2 cmd_res = os.system('dir') #仅执行命令,不保存结果 3 print('-->',cmd_res) #打印结果为0,表示运行成功了了 4

python 之day4

Python之路,Day4 本节大纲 迭代器&生成器 装饰器  基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式,运算后得出结果,结果必须与真实的计算器所得

python 初识面向对象

一.初识面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可. 缺点是:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身. 应用场景:一旦完成基本很少改变的场景,著名的例子有Linux內核,git,以及Apache HTTP Server等. 面向对象的程序设计的核心是对象(上帝式思维),要理解对象为何物,必须把自

Python初识对象

一 楔子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能,比如人拿棍打狗, 狗可以咬人,怎么描述这种不同的角色和他们的功能呢? 你搜罗了自己掌握的所有技能,写出了下面的代码来描述这两个角色 def person(name,age,sex,job): data = { 'name':name, 'age':age, 'sex':sex, 'job':job } return data

Python 初识面向对象#学习猿地

> 面向对象编程——Object Oriented Programming,简称`OOP`,是一种**以对象为中心**的程序设计思想. > > 面向过程编程——Procedure Oriented Programming,简称`POP`,是一种**以过程为中心**的程序设计思想. ## 理解面向过程与面向对象思想 大家先思考一个问题:把大象装进冰箱,需要几步? 小品给出的答案:三步 第一步:打开冰箱门 第二步:把大象装进去 第三步:关上冰箱门 ##### 用面向过程去理解 > 上面