• python初识


    一、集合(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'>
    View Code

      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
    View Code

      4.集合的长度

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

      5.集合成员的判断

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

      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,两个列表有交集
    View Code

    二、文件常用操作

      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)        #获取文件大小
    View Code

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

        
    1 import os,shutil
    2 os.mkdir("file")                   #创建目录
    3 os.makedirs(r“c:python	est”)#创建多级目录
    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")       #移动文件(目录)
    View Code

      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
    你是我生命之光中的一道暗影
    Did you feel us
    你能理解我们吗')
     8 
     9 f2= open('faded2','a',encoding='utf-8')#'a'即 append,追加
    10 f2.write('
    Another star
    另一颗行星
    You fade away
    你逐渐消失')
    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('
    qwertyuiop
    ')
    34 f2.write('asdfghjkl')
    35 print(f2.readline())
    36 '''
    37 '''
    38 f3= open('faded3','w+',encoding='utf-8')#文件句柄,写读
    39 f3.write('Another dream
    ')
    40 f3.write('另外的梦想
    ')
    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('
    Where are you now
    ')
    47 print(f2.tell())
    48 print(f2.seek(0))
    49 print(f2.readline())
    50 f2.write('Another dream
    ')
    51 print(f2.tell())
    52 '''
    53 
    54 f2= open('faded2','rb')#文件句柄,读,二进制文件(文件传输)
    55 print(f2.readline()) #输出:b'Another dream
    '
    56 print(f2.readline()) #输出:b'xe5x8fxa6xe5xa4x96xe7x9ax84xe6xa2xa6xe6x83xb3
    '
    57 '''
    58 '''
    59 f2= open('faded2','wb')#文件句柄,写,二进制文件(文件传输)
    60 f2.write('Hello python
    '.encode())#默认utf -8
    61 f2.write('Hello python
    '.encode())#默认utf -8
    62 f2.close()
    63 '''
    64    
    View Code

      4.关于文件打开模式的几点参照

        
     1 w:以写方式打开,
     2 a:以追加模式打开 (从 EOF 开始, 必要时创建新文件)
     3 r+:以读写模式打开
     4 w+:以读写模式打开 (参见 w )
     5 a+:以读写模式打开 (参见 a )
     6 rb:以二进制读模式打开
     7 wb:以二进制写模式打开 (参见 w )
     8 ab:以二进制追加模式打开 (参见 a )
     9 rb+:以二进制读写模式打开 (参见 r+ )
    10 wb+:以二进制读写模式打开 (参见 w+ )
    11 ab+:以二进制读写模式打开 (参见 a+ )
    View Code

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

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

    三、字符编码格式的转换  

        
     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'xcexd2xc3xc7xb2xbbxcdxfcxb3xf5xd0xc4' <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'xcexd2xc3xc7xd6xb1xc3xe6xcexb4xc0xb4' <class 'bytes'>
    11 print(str.encode('utf-8'),type(str.encode('utf-8')))#输出:b'xe6x88x91xe4xbbxacxe4xb8x8dxe5xbfx98xe5x88x9dxe5xbfx83' <class 'bytes'>
    12 
    13 utf_gbk = str2.encode('gbk')#此处无decode方法,用encode('gbk')即可转为gbk编码
    14 print(utf_gbk)#输出:b'xcexd2xc3xc7xd6xb1xc3xe6xcexb4xc0xb4'
    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'xe6x88x91xe4xbbxacxe7x9bxb4xe9x9dxa2xe6x9cxaaxe6x9dxa5'
    View Code

    四、函数的简单入门

      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
    '%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()
    View Code

      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
    View Code

      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') #测试二,关键字参数必须在位置参数之后
    View Code

      

      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']
    View Code

      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)
    View Code

        

        <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
    View Code

     

      以上有部分内容摘自菜鸟教程和脚本之家,详情请戳

        菜鸟教程:http://www.runoob.com/python/python-functions.html

        脚本之家:http://www.jb51.net/article/48001.htm

        

     

      

        

      

      

      

        

  • 相关阅读:
    C#与Java的几点区别
    用VB读取记事本的内容,控制计算器的按钮(VB6)
    通过实例说明Java中的多态
    [导入]析构函数(内存泄漏,三法则)
    [导入]const限制符
    [导入]类的一些特殊限制成员
    [导入]基类的复制控制函数
    [导入]容器适配器
    [导入]派生类到基类转换的可访问性
    [导入](复制、默认)构造函数
  • 原文地址:https://www.cnblogs.com/schut/p/7357812.html
Copyright © 2020-2023  润新知