python基础(三)
一、集合(set)
集合是python的基本数据类型,是指无序且无重复的数据组合:
>set1 = set((11, 2, 33, 22, 22))
(11, 2, 33, 22) #重复元素没有转换过来
集合类型有以下方法可供使用:
------------------------------
set1.update(set2)
#利用set2更新set1
set1.add(set2)
#向set1新增元素,如果有重复则无效
set1.clear()
#清空set1的所有元素
set1.copy()
#返回set1的复制
set1.difference(set2)
#返回set1中set2不存在的元素
set1.difference_update()
#获取set1中set2不存在的元素,并赋值给set1
set1.discard(1)
set1.remove(1)
#discard和remove都是删除元素,区别在于discard不会返回报错,remove则会返回报错。
set1.intersection(set2)
#返回set1与set2的交集
set1.intersection_update()
# 获取set1与set2的交集,并赋值给set1
set1.issuperset(set2)
set1.issubset(set2)
#这俩都是判断方法,issuperset是判断set1是否是set2的父序列,issubset是判断set1是否为set2的子序列。
set1.union(set2)
#返回set1与set2的并集
二、三元运算
老师在这里提到了三元运算,这事一种简化判断代码写法的方式,比如:
>值1 if 条件 else 值2
相当于
if 条件:
值1
else:
值2
三、深浅拷贝
深浅拷贝是指是copy模块的两个功能,copy模块的copy方法与deepcopy方法
copy方法是复制此内存地址的所有数据,而deepcopy是复制此内存地址的所有数据以及其指向其他内存区域的所有数据。
所以对于值不包含其他内存指向的变量(字符串,数字),deepcopy和copy并无不同。
>i = 'copy'
>copy.copy(i)
#'copy'
>copy.deepcopy(i)
#'copy'
而针对元组、列表、字典,则区别明显:
>i = ['copy', {'k1': 1, 'k2': 'deepcopy'}]
>copy.copy(i)
#此时copy.copy返回的列表,{'k1': 1, 'k2': 'deepcopy'}指向的仍然是i的值的内存地址
>copy.deepcopy(i)
#此时copy.copy返回的列表,{'k1': 1, 'k2': 'deepcopy'}指向的是新的值的内存地址
ps:目前只是学习中,并不清楚实际应用中copy和deepcopy的差异。。。
四、函数
1、函数简介
函数是编程语言的重要概念,任何程序语言都在使用函数。
函数是一个通用代码的合集,以减轻通用代码的编写量。
python函数的编写格式为:
def 函数名(可能的参数)
代码
return 返回值
2、函数返回值
定义任何函数的时候,你都可以通过return语句设置返回值。
如果在定义函数的时候没有写return,那默认返回none(null)
你可以返回一切类型,包括函数。
3、函数的参数
(1)普通参数
在定义函数的时候,你可以指定参数,以让函数更灵活。
def sendmail(mailaddr)
发送邮件(mailaddr)
return True
sendmail('123@qq.com')
这样你可以通过传递邮箱地址,发送邮件了。
(2)指定参数
看下下面这个函数
def sendmail(mailaddr, subj)
发送邮件(mailaddr,邮件内容)
return True
sendmail('123@qq.com', '主题')
这里我给函数增加了一个参数subj,这样我们可以在发送邮件的时候自由填写邮件内容。
但是如果我并不记得函数形参的顺序,或者不愿意按顺序填写怎么办?可以通过指定参数发送。
sendmail(subj='主题很好', mailaddr='123@qq.com')
(3)默认参数
在修改下这个函数
def sendmail(mailaddr, subj)
发送邮件(mailaddr,邮件内容)
return True
如果我希望这个邮件函数,在没有传参的情况下,也发送给指定邮箱呢?
我在定义函数的时候可以改成这样:
def sendmail(mailaddr=‘123@qq.com’, subj)
发送邮件(mailaddr,邮件内容)
return True
(4)动态参数
在定义函数的时候,我们可以设置动态参数,这样函数可以更加灵活的接受参数。
def fuc1(*args) #当调用fuc1时,fuc1会将()括号内的值存入元组,传给fuc1.
def fuc1(**kwargs) #当调用fuc1时,fuc1会将()括号内的值存入字典,传给fuc1.
def fuc1(*args, **kwargs) #当调用fuc1时,fuc1会将()括号内的值存入字典和元组,传给fuc1.