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.

posted @ 2016-07-27 16:14  jizast  阅读(192)  评论(0编辑  收藏  举报