热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python之基础篇(三)

基础篇之三:一,数据类型之set.总结:set无序,不重复。1,创建set:s{1,2,3}print(s,type(s))list1[1,2,3]s1(list1)prin

基础篇之三:

一,数据类型之set.

总结:set无序,不重复。

1,创建set:

s = {1,2,3}print(s,type(s))
list1 = [1,2,3]
s1=(list1)
print(s1,type(list1))
s2 = set()
print(s2,type(s2))
{1, 2, 3} [1, 2, 3] set() 

2,set方法

1,添加元素:(s.add)

2,清除元素:(s.clear)

3,s1中存在,s2中不存在:(s3=s1.difference(s2))

4,移除元素并不报错:(s.discard())注:删除的元素不在集合里也不会报错

5,移除并报错:(s.remove())注:删除的元素不在集合里会报错

6,移除某个元素,且随机移除:(s.pop)

7,取交集:(s.intersection)

8,取并集:(s.union)

#实例:s = {1,2,3,4,5}s.add(123)#1,添加元素.addprint(s)#显示结果:{1, 2, 3, 4, 5, 123}02:清除元素 .clears = {1,2,3,4,5}s.clear()print(s)#显示结果:set()#03:s1中存在,s2中不存在:s1 = {11,22,33}s2 = {22,33,44}s3=s1.difference(s2)print(s3)#显示结果:{11}#04:移除指定元素不报错s = {33,4,55,66}s.discard(66)  #移除指定元素 b不报错print(s)#显示结果:{22,4,55}#06:取交集:s1={11,22,33,44}s2={33,44,55}#s.intersection()#取交集s3= s1.intersection(s2)print(s3)#显示结果:{33,44}#07:取并集s1={11,22,33,44}s2={33,44,55}# set.union()#取并集s3= s1.union(s2)print(s3)#显示结果:{33,22,55,11,44}#08:instersection_updetes1 = {11,22,33,44,55}s2 = {11,22,33,44}s1.intersection_update(s2)print(s1)#显示结果:{33, 11, 44, 22}#09集合issubset和issuperset的使用s1 = {11,22,33,44,55}s2 = {11,22,33,44}s3 = {66,77,88}s4 = s2.issubset(s1)s5 = s1.issuperset(s2)print(s4)print(s5)#显示结果:TrueTrue

二:集合的应用:

CMDB

old_dict = {    "#1":8,    "#2":4,    "#4":2,}new_dict = {    "#1":4,    "#2":4,    "#3":2,} renew_dict = {    "#1":4,    "#2":4,    "#3":2,}

思路:

应该删除哪几个槽位:old中存在的new不存在  old.difference(new)应该更新哪几个槽位:new中存在old中不存在  new.difference(old)应该增加哪几个槽位:old和new中都存在      old.intersection(new)old:  new:  第一步:将第二步:更新old_dict存在,new不存在old_keys = old_dict.keys()new_keys = new_dict.keys()old_set = (old_keys)new_set = (new_keys)remove_set = old_set.difference(new_set)new中存在,old中不存在remove_set = new_set.difference(old_set)new和old中都存在update_set = old_set.intersection(new_set)

代码:

old_keys = old_dict.keys()old_set = set(old_keys)new_keys = new_dict.keys()new_set = set(new_keys)print(new_set)print(old_set) remove_set = old_set.difference(new_set)add_set = new_set.difference(old_set)update_set = new_set.intersection(old_set)print(remove_set)print(add_set)print(update_set)

三:函数

函数:自定义函数与内置函数.

函数:

1,def关键字,创建函数。

2,函数名 函数的名称,日后根据函数名调用函数

3,参数 为函数体提供数据

4,函数体 函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等...

5,返回值 当函数执行完毕后,可以给调用者返回数据。

例子:

def 函数名(参数):         ...    函数体    ...    return

返回值:函数是一个功能块,该功能到底执行成功与否,需要通过返回值来告知调用者。

def 发送短信():         发送短信的代码...     if 发送成功:        return True    else:        return False  while True:         # 每次执行发送短信函数,都会将返回值自动赋值给result    # 之后,可以根据result来写日志,或重发等操作     result = 发送短信()    if result == False:        记录日志,短信发送失败...

参数:

#函数的基本参数

#1,形式参数

#2,实际参数

#3,默认参数   必须放在参数列表末尾

#4,指定参数

#5,动态参数   *   **  args   kwargs

# ######### 定义函数 ########## name 叫做函数func的形式参数,简称:形参def func(name):    print(name)# ######### 执行函数 ##########  'anka' 叫做函数func的实际参数,简称:实参func("anka")
def func(name, age = 18):    print("%s:%s" %(name,age))# 指定参数func('anka', 19)# 使用默认参数func('leo')注:默认参数需要放在参数列表最后默认参数#显示结果:anka:19leo:18
ef func(*args):    print(args)# 执行方式一func(11,33,4,4454,5)# 执行方式二li = [11,2,2,3,3,4,54]func(*li)#动态参数一#显示结果:(11, 33, 4, 4454, 5)(11, 2, 2, 3, 3, 4, 54)

指定函数:

#指定参数:即指定将实参赋值给哪个形参,此时可以不按照顺序来写def send(xxoo,content,xx='hello world'):    print(xxoo,content,xx)    print('邮件发送成功',xxoo,content)    return Truewhile True:    em = input('请输入邮箱地址:')    #result = send(em,'Test',)    result = send(em,xx='Test',cOntent='OK')    if result == True:        print('发送成功')    else:        print('发送失败')#显示结果:请输入邮箱地址:619569405@qq.com619569405@qq.com OK Test邮件发送成功 619569405@qq.com OK发送成功

动态参数扩展:

eg01:多个单个变量,整合成元组

def f1(*args):    print(args,type(args)) f1(11)f1([1,2,3,4,])l1 = [1,2,3,4,4,5,6]f1(l1)f1(*l1)str1 = 'alex'f1(str1)f1(*str1)#显示结果:(11,) ([1, 2, 3, 4],) ([1, 2, 3, 4, 4, 5, 6],) (1, 2, 3, 4, 4, 5, 6) ('alex',) ('a', 'l', 'e', 'x') 

eg02:一定要注意加*和不加*的区别:

01,不加*,则是将整个列表作为一个元组

02,加* 将列表中的每一个元素转换为元组一个元素,如果是字符串,则将字符串转换为元组的一个元素。

 整合为字典变量

def f1(**args):    print(args,type(args))f1(n1='alex',n2=38)dic = {'k1':'v1','k2':'v2'}f1(**dic)#显示结果:{'n1': 'alex', 'n2': 38} {'k1': 'v1', 'k2': 'v2'} 

eg03:整合*args,**kwargs

def f1(*args,**kwargs):    print(args)    print(kwargs)f1(11,22,33,44,k1='v1',k2='v2',n1='www',n2='sss')#显示结果:(11, 22, 33, 44){'k2': 'v2', 'n2': 'sss', 'k1': 'v1', 'n1': 'www'}

eg04:字符串的格式化.format

#可变参数*的应用s = 'I AM {0},age {1}'.format('alex',38)print(s)s2 = 'I AM {0},age {1}'.format(*['alex',18])print(s2)#可变参数**的应用s3 = 'I AM {name},age {age}'.format(name='alex',age=38)print(s3)dic = {'name':'alex','age':38}s4 = 'I AM {name},age {age}'.format(**dic)print(s4)#显示结果:I AM alex,age 38I AM alex,age 18I AM alex,age 38I AM alex,age 38

内置函数:

wKioL1d5-HbggrfpAAI_U8-cYHo194.png-wh_50

n = abs(-1)   #求绝对值print(n)#0,None,"",[],{},():Falseprint(all([1,2,3,4]))  #每个元素都为真结果才为真print(all([1,2,3,0]))  print(any([1,2,3,0]))  #有一个元素为真返回结果就为真print(bin(5))       #把十进制数字转换为二进制print(oct(5))       #把十进制数字转换为八进制print(hex(5))       #把十进制数字转换为十六进制print(bool(0))       #布尔值,返回结果为False或者是True#打印结果:1TrueFalseTrue0b1010o50x5False

函数作用域:

def say():    name = "mohan"    print(name)say()#mohan  # 是没有问题的,那么看下下面的例子:def say():    name = "mohan"    print(name)say()print(name)# 这个能不能调用呢,不能,会报错!函数的作用域就是在函数里定义的变量不能被外面使用!

继续:

name2 = "mohan"def say():    name = "yamei"    print name    print name2say()#输出结果:yameimohan

总结:函数的作用域就是在函数里定义的变量他的作用域是函数体内部,不能被外面使用!但是外部全局定义的全局变量在函数内是可以使用的。

举个例子来说:你在房子里可以看到屋内的东西和房子外的东西,但是你在房子外面就只能看到房子外的东西不能看到房子内的东西!

原因防止在函数调用的时候防止变量冲突!

问题:我在外面定义的全局变量在函数内可以改他吗?  #看下面的例子:

name2 = "meinv"def say():    name = "hanyue"    name2 = "hanyue is meinv"    print(name,name2)say()print(name2)#显示结果:hanyue hanyue is meinv#在函数内改变了meinv#但是外面调用还是没有改变

但是我就想在函数内改掉这个变量怎么办呢?在函数内调用global参数!(提供这个功能,但是不建议用!你在局部变量改全局变量很容易引起混乱)

name2 = "meinv"def say():    global name2    name = "hanyue"    name2 = "hanyue is meinv"    print(name,name2)say()print(name2)#显示结果:hanyue hanyue is meinvhanyue is meinv

四:文件操作

文件句柄 = file('文件路径''模式')

#python中打开文件有两种方式,即:open(...) 和  file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open(),python2,open()和file()可以正常使用,python3.0以后file方法讲被用做其他,open方法会自动的去帮你找他调用得方法在那里!

开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。 打开文件的模式有: r,只读模式(默认)。w,只写模式。【不可读;不存在则创建;存在则删除内容;】a,追加模式。【可读;   不存在则创建;存在则只追加内容;】"+" 表示可以同时读写某个文件 r+,可读写文件。【可读;可写;可追加】w+,无意义a+,同a"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用) rUr+U"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注) rbwbab
2.操作文件f.read()read()#无参数,读取全部,有参数  b按照字节,无b按照字符tell():获取当前指针位置seek():跳转到指定位置write():写数据close():关闭文件fileno():文件描述符flush():把写入的内容强制刷新到磁盘上readable():是否可读readline():仅读取一行seekable():是否可移动truncate():截取数据,指针位置之后的全部清空readlines():for循环文件句柄 f = open(xxxx)for line in f:    print(line)

3,with

为了避免打开文件后忘记关闭,可以通过管理上下文,即:

with open('log','r') as f:

如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。

例子:比如要修改nginx.conf 文件然后还需要回滚怎么做?

with open('nginx.conf','r') as obj1,open('nginx.conf.new','w') as obj2:    for i in obj1.readlines():        i = i.strip()        print i        obj2.write(i)        obj2.write('\n') #读取nginx.conf每行然后存储到新的文件nginx.conf.new里!


本文出自 “小虫的快乐” 博客,请务必保留此出处http://bughapply.blog.51cto.com/744579/1795500


推荐阅读
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 第八章 元组与集合
    目录​一、元组二、集合三、集合的数学操作四、集合的相关操作五、集合间的关系六、列表、元组、集合、字典区别一、元组元组是python内置的数据结构之一, ... [详细]
  • 一.元祖类型 (tuple)1.什么是元祖?用途:用于存放多个值,当存放的多个值只有读的需求没有改变的需求时,用元祖最合适.定义方式:在()内用逗号分隔开的多个任意类型的值t(1, ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
author-avatar
红箭777_387
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有