pyhthon基础知识【3】:集合、文件与函数

本节内容:
1、集合(去重与关系测试)
2、文件操作
3、函数

----------------------------------------------------------------------------/-----------------------------------------------------------------

1、集合 (去重与关系测试)
1.1  集合是一个无序的,不重复的数据组合,它的主要作用如下:
      •去重,把一个列表变成集合,就自动去重了
     •关系测试,测试两组数据之前的交集、差集、并集等关系
1.2 基础操作
1.创建集合,集合会自动去重,集合是无序的
>>> s = set([1,2,3,4,4,4])
>>> s
{1, 2, 3, 4}

>>> s = set("Hello")
>>> s
{'e', 'l', 'H', 'o'}

2.符号操作
>>> a = set([1,2,3,4])
>>> b = set([2,3,7,8,9])

>>> c = a|b             #求两个集合的并集
>>> c
{1, 2, 3, 4, 7, 8, 9}

>>> c = a&b             #求两个集合的交集
>>> c
{2, 3}

>>> c = a-b             #求两个集合的差集,注意谁在前谁在后结果不一样,即a有,b没有的
>>> c
{1, 4}
>>> c = b-a            #差集,即b有,a没有的
>>> c
{8, 9, 7}

>>> c = a^b              #对称差集,即a与b的并集减去a与b的交集,也就是求只在a出现或者只在b出现的元素集合
>>> c
{1, 4, 7, 8, 9}

3.集合修改
>>> s
{'e', 'l', 'H', 'o'}
>>> s.add(6)            #添加一项
>>> s
{'e', 'l', 'H', 'o', 6}

>>> s.update(["add",5,7878])            #添加多项
>>> s
{5, 6, 7878, 'e', 'o', 'add', 'l', 'H'}

t.remove('H')            #删除一项
len(s)                        #查看集合长度
x in s                        #若x元素在s集合中返回True
x not in s                 # 若x元素不在s集合中返回True

1.3 关系测试
s.issubset(t)  
s <= t  
测试是否 s 中的每一个元素都在 t 中  
  
s.issuperset(t)  
s >= t  
测试是否 t 中的每一个元素都在 s 中  
  
s.union(t)  
s | t  
返回一个新的 set 包含 s 和 t 中的每一个元素  
  
s.intersection(t)  
s & t  
返回一个新的 set 包含 s 和 t 中的公共元素  
  
s.difference(t)  
s - t  
返回一个新的 set 包含 s 中有但是 t 中没有的元素  
  
s.symmetric_difference(t)  
s ^ t  
返回一个新的 set 包含 s 和 t 中不重复的元素  
  
s.copy()  
返回 set “s”的一个浅复制  

2、文件操作
2.1 打开文件
open(name[.mode[.buffering]])
name是文件路径(名字);mode是模式(可选);buffering是缓冲(可选)
例如: f = open(r‘C:\test\somefile.txt’)即打开C盘的somefile.txt文件,若C盘无此文件将会出现异常
描述
‘r’读模式 (可省略,因为默认打开文件是r模式)
‘w’写模式
‘a’追加模式
‘b’二进制模式(可添加其他模式使用)
‘+’读/写模式(可添加其他模式使用)
2.2 基本操作
2.2.1 读写文件

写文件:
>>> f = open('someflie.txt','w')
>>> f.write('Hello,')
6
>>> f.write('World!')
6
>>> f.close()

读文件:
>>> f = open('someflie.txt','r')
>>> f.read(4)
'Hell'
>>> f.read()
'o,World!'
2.2.2 读写行
readline函数可以一次性读出文件的一行字符
readlines函数可以一次性读取文件所有字符,每一行为一个元素,以列表的形式呈现
2.2.3 关闭文件
close()


3、函数
3.1 创建函数
3.1.1 用callable函数判断一个函数是否可以被调用
>>> import math
>>> x = 1
>>> y = math.sqrt
>>> callable(x)
False
>>> callable(y)
True
3.1.2 以def为关键字创建函数
>>> def hello(name):
    return print("Hello,",name+'!')     ——如果想return多个参数可以用元组

>>> hello('xasdsa')
Hello, xasdsa!
3.1.3 文档化函数     
  如果在函数或者模块的开头写下字符串,它会作为函数的一部分进行存储,这称为文档字符串
>>> def hello(x):
    'zhe shi yi ge wen dang zi fu chuan'
    return x*x

>>> hello(6)
36
>>> help(hello)                              ——————可以用help来查看
Help on function hello in module __main__:

hello(x)
    zhe shi yi ge wen dang zi fu chuan

 3. 1.4 python中的函数可以只有一个return,而不return任何东西,系统会默认返回 None
3.2 函数的使用
 3.2.1 参数作用域
例子1:
>>> def try_to_change(n):
    n = 'ABC'


>>> name = "DEF"
>>> try_to_change(name)
>>> name
'DEF'                         ——字符串是不能被改变的

例子2:
>>> def try_to_change(n):
    n[0] = 'ABC'


>>> name = ['DEF','KJJK' ]
>>> try_to_change(name)
>>> name
['ABC', 'KJJK']               ——列表是可以被改变的,形参和实参变量指向了同一个列表

例子3:
>>> def try_to_change(n):
    n[0] = 'ABC'

>>> name = ['DEF','KJJK' ]
>>> try_to_change( name[:] )     ——把name复制了一个新列表传给形参,所以后面的name列表不被改变
>>> name
['DEF', 'KJJK']
 3.2.2 关键字参数和默认值
 函数在传值的时候除了可以用位置参数的方式,还是根据形参名来传参数,这样子的方式不需要按照特定顺序
>>> def hello(greeting,name):
    print("%s,%s!"%(greeting,name))


>>> hello('zxcz','zxczx')
zxcz,zxczx!
>>> hello(name = "king",greeting = "hei")
hei,king!

注意这样是不行的
>>> hello('King',greeting = "hei")
Traceback (most recent call last):
  File "<pyshell#53>", line 1, in <module>
    hello('King',greeting = "hei")
TypeError: hello() got multiple values for argument 'greeting'   

#也可以在定义函数时给定默认形参值(在调用函数时可以修改)
>>> def hello(name = "King",greeting = 'hei'):
    print("%s,%s!"%(greeting,name))


>>> hello()
hei,King!
>>> hello('James','hello')
hello,James!
>>> hello(name = "K",greeting = 'hi')
hi,K!
 3.2.3 收集参数
用‘ * ’ 来收集位置参数,会生成一个元组
用‘ ** ’来收集关键字参数,会生成一个字典
例子1:
>>> def hello(*data):
    print(data)


>>> hello('zxczx','sdds',651,'az')
('zxczx', 'sdds', 651, 'az')

例子2:
>>> hello('zxczx','sdds',651,'az')
zxczx
('sdds', 651, 'az')

例子中的*data就是用来收集剩余的位置参数的,若没有,则返回一个空元组
>>> def hello(**name):
    print(name)


>>> hello(x=1,y=2,z=3)
{'x': 1, 'y': 2, 'z': 3}
#把 * 和 **  联合起来用
>>> def hello(x,y,z=3,*A,**B):
    print(x,y,z)
    print(A)
    print(B)


>>> hello(1,2,3,5,6,7,8,go = 15,back ='zxc')
1 2 3
(5, 6, 7, 8)
{'go': 15, 'back': 'zxc'}
>>> hello(1,2)
1 2 3
()
{}
3.2.4 参数收集的逆过程
可以在函数定义或者调用时用*来引入元组(列表),用**来引入字典
例子1:
>>> def add(x,y):
    return x+y

>>> a = [1,2]
>>> add(*a)
3

例子2:
>>> def a(**hei):
    print(hei['name'],'is',hei['age'],'years old')

>>> k ={'name':'King','age':26}
>>> a(**k)
King is 26 years old
3.3 讨论全局变量与局部变量
在函数内创建赋的值默认是局部变量,无法影响外部的全局变量,但是也可以通过处理把局部变量变成全局变量
>>> x = 1
>>> def change():
    x = 5
    return

>>> change()
>>> x
1


>>> x = 1
>>> def change():
    global x
    x = 5
    return

>>> change()
>>> x
5









































































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值