前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python基础3

python基础3

作者头像
py3study
发布2020-01-03 17:34:37
4190
发布2020-01-03 17:34:37
举报
文章被收录于专栏:python3python3

python基础3

 交换: a,b=b,a 相当于定义了一个元组t=(b,a) 然后将t[0]的值给了a,t[1]的值给了b ####字典#### 定义用花括号 集合定义若为空的话,会默认为字典,所以集合不能为空 子典只能通过关键字来查找值,因为字典是key-value(关键字-值),因此不能通过值来查找关键字 In [1]: dic = {"user1":"123","user2":"234","user3":"789"} In [3]: dic["234"] --------------------------------------------------------------------------- KeyError                                  Traceback (most recent call last) <ipython-input-3-2845b64d96b1> in <module>() ----> 1 dic["234"] KeyError: '234' 字典是一个无序的数据类型,因此也不能进行索引和切片等操作。 In [1]: dic = {"user1":"123","user2":"234","user3":"789"} In [2]: dic["user1"] Out[2]: '123' In [5]: dic["user2"] Out[5]: '234' In [7]: user = ['user1','user2','user3'] In [8]: passwd = ['123','234','456'] In [9]: zip(user,passwd) Out[9]: [('user1', '123'), ('user2', '234'), ('user3', '456')] In [10]: 当你有一个用户名单和密码,若使用列表的类型,判断用户是否和密码一致时,就比较麻烦,而使用字典时,只需通过关键子就可以返回相对应的值,(如上例子:当定义一个子典当你搜索user1时,字典类型就会返回该关键字对应的密码,此时只需判断该密码是否匹配即可) ####字典的基本操作### In [17]: dic. dic.clear       dic.items       dic.pop         dic.viewitems dic.copy        dic.iteritems   dic.popitem     dic.viewkeys dic.fromkeys    dic.iterkeys    dic.setdefault  dic.viewvalues dic.get         dic.itervalues  dic.update       dic.has_key     dic.keys        dic.values 字典添加 In [12]: dic Out[12]: {'user1': '123', 'user2': '234', 'user3': '789'} In [13]: dic["westos"]='linux' In [14]: dic Out[14]: {'user1': '123', 'user2': '234', 'user3': '789', 'westos': 'linux'} In [15]: dic["hello"]='world' In [16]: dic            ####由此可以看出字典是无序的,在添加时,并不会按照顺序往后添加#### Out[16]: {'hello': 'world',  'user1': '123',  'user2': '234',  'user3': '789',  'westos': 'linux'} In [17]: 字典更新 In [22]: dic Out[22]: {'hello': 'world', 'user1': '123', 'user2': '234', 'user3': '789'} In [23]: dic["user1"]="redhat"        ###可直接通过赋值对关键字进行更新### In [24]: dic Out[24]: {'hello': 'world', 'user1': 'redhat', 'user2': '234', 'user3': '789'} ###或者通过dic.update更新### In [25]: dic Out[25]: {'hello': 'world', 'user1': 'redhat', 'user2': '234', 'user3': '789'} In [26]: help(dic.update) Help on built-in function update: update(...)     D.update([E, ]**F) -> None.  Update D from dict/iterable E and F.     If E present and has a .keys() method, does:     for k in E: D[k] = E[k]     If E present and lacks .keys() method, does:     for (k, v) in E: D[k] = v     In either case, this is followed by: for k in F: D[k] = F[k] (END) In [28]: dic1={'yunwei':"westos",'user1': 'redhat'} In [29]: dic.update(dic) dic   dic1  dict   In [29]: dic.update(dic1)        ###将dic1中dic所没有的更新给了dic### In [30]: dic Out[30]: {'hello': 'world',  'user1': 'redhat',  'user2': '234',  'user3': '789',  'yunwei': 'westos'} In [31]: ####若是关键字相同,而值不同,就将值更新给他#### In [35]: dic Out[35]: {'hello': 'world'} In [36]: dic1 Out[36]: {'user1': 'redhat', 'yunwei': 'westos'} In [37]: dic1["hello"]="hai" In [38]: dic.update(dic1) In [39]: dic Out[39]: {'hello': 'hai', 'user1': 'redhat', 'yunwei': 'westos'} In [42]: dic.clear()        ###清空dic### In [43]: dic Out[43]: {} In [44]: del(dic)        ###删除dic### In [45]: dic --------------------------------------------------------------------------- NameError                                 Traceback (most recent call last) <ipython-input-45-1b445b6ea935> in <module>() ----> 1 dic NameError: name 'dic' is not defined ####字典的删除#### In [49]: dic1 Out[49]: {'user1': 'redhat', 'yunwei': 'westos'} In [50]: dic1.pop("user1")        ###指定关键字,删除该关键字和值#### Out[50]: 'redhat' In [51]: dic1 Out[51]: {'yunwei': 'westos'} In [52]: In [74]: dic1.popitem()        ###不指定关键字,随即删除### Out[74]: ('yunwei', 'westos') In [77]: dic = {"hello":"123","westos":"linux"}         In [79]: dic.keys()        ###查看dic的全部关键字### Out[79]: ['hello', 'westos'] In [80]: dic.values()        ###查看dic的全部值### Out[80]: ['123', 'linux'] In [82]: dic.get("hello")    ###得到相对应的关键字的值,若关键字不存在,则默认返回none Out[82]: '123' In [83]: dic.get("redhat") In [84]: print dic.get("redhat") None In [87]: dic.has_key("hello")        ###查看是否有该关键字, Out[87]: True In [88]: dic.has_key("world") Out[88]: False dict.fromkeys()            ###可以通过该操作实现去重### In [89]: dic Out[89]: {'hello': '123', 'westos': 'linux'} In [90]: dic.fromkeys([1,2,3,4]) Out[90]: {1: None, 2: None, 3: None, 4: None} In [91]: dic.fromkeys([1,2,3,4],'hello') Out[91]: {1: 'hello', 2: 'hello', 3: 'hello', 4: 'hello'} In [38]: d = {} In [32]: li = [1,2,3,1,2,3]            ###去重### In [33]: d.fromkeys(li) Out[33]: {1: None, 2: None, 3: None} In [34]: d.fromkeys(li).keys() Out[34]: [1, 2, 3] 字典的key必须是不可变的数据类型 In [94]: dic = {1:'1',2:'2',1:'a'} In [95]: dic Out[95]: {1: 'a', 2: '2'}        ###一个关键字只能对应一个值### In [96]: for key in dic.keys():        ###逐个遍历key###    ....:     print "key=%s" % key    ....: key=1 key=2 In [97]: for value in dic.values():    ###逐个遍历value的值###     print "value=%s" % value    ....:      value=a value=2 In [98]: for key,value in dic.keys(),dic.values():    ###逐个遍历key -> value 的值#####    ....:     print "%s -> %s" %(key,value)    ....: 1 -> 2 a -> 2 In [100]: dic Out[100]: {1: 'a', 2: '2'} In [101]: dic.items()            ###以元组的形式一一对应key和value的值### Out[101]: [(1, 'a'), (2, '2')] In [102]: for k,v in dic.items():    .....:     print "%s -> %s" %(k,v)    .....: 1 -> a 2 -> 2 和list的比较,dict的不同: 1 查找和插入的速度快,字典不会随着key值的增加查找速度减慢 2 占用内存大,浪费空间 小练习: 去掉一个最高分和最低分,并且显示平均值 li = [90,91,67,100,89] In [103]: li = [90,91,67,100,89] In [104]: li.sort()        ###排序### In [105]: li Out[105]: [67, 89, 90, 91, 100] In [106]: li.pop() Out[106]: 100 In [107]: li.pop(0) Out[107]: 67 In [108]: li Out[108]: [89, 90, 91] In [109]: sum(li)/len(li)    ###sum函数求和### Out[109]: 90 小练习:用字典实现case语句: !/usr/bin/env python #coding:utf-8 from __future__ import division num1 = input("num1:") oper = raw_input('操作:') num2 = input('num2:') dic = {"+":num1+num2,"-":num1-num2,"*":num1*num2,'/':num1/num2} if oper in dic.keys():     print dic[oper] #####函数#### 函数名的理解:函数名与变量名类似,其实就是指向一个函数对象的引用;             给这个函数起了一个“别名”:函数名赋给一个变量 In [5]: sum(li) Out[5]: 6 In [6]: a = sum        ###将sum的函数名给了a变量,使得a能够进行求和### In [7]: a(li) Out[7]: 6 In [8]: In [8]: sum = abs In [9]: sum(-1) Out[9]: 1 In [10]: sum([2,4,5]    ###将abs的函数名给了sum,则sum就不再具有求和的功能### --------------------------------------------------------------------------- TypeError                                 Traceback (most recent call last) <ipython-input-10-d3c81a94a2a0> in <module>() ----> 1 sum([2,4,5]) TypeError: bad operand type for abs(): 'list' In [11]: a([2,4,5]) Out[11]: 11 ####函数的返回值### def    hello():     print "hello" print hello()            ###该函数没有返回值,只是打印了hello,返回值为none def    hello():     return    ”hello“ print hello()            ###该函数有返回值,则返回一个hello###     ####函数在执行过程中一旦遇到return,就执行完毕并且将结果返回,如果没有遇到return,返回值为none### ###定义一个什么也不做的空函数,可以用pass语句,作为一个占位符使得代码先运行起来 def hello():     return "hello" def world():     pass print hello() print world() 运行结果: /usr/bin/python2.7 /home/kiosk/PycharmProjects/pythonbasic/10.py hello None Process finished with exit code 0 小练习:将abs的错误显示进行优化### def my_abs(x):     if isinstance(x,(int,float)):    ###判断数据类型,是int或是float(也可以是别的类型,看你写的)###      print   abs(x)     else:         print "请输入整型或浮点型的数" my_abs("a") my_abs(123) 执行结果: /usr/bin/python2.7 /home/kiosk/PycharmProjects/pythonbasic/11.py 请输入整型或浮点型的数 123 Process finished with exit code 0 小练习:定义一个函数func(name),该函数效果如下: func('hello')    -> 'Hello' func('World')    -> 'World' def func(name):     print name.capitalize() name = raw_input("name:") func(name) 执行结果: /usr/bin/python2.7 /home/kiosk/PycharmProjects/pythonbasic/12.py name:hello Hello Process finished with exit code 0 函数的返回值,函数可以返回多个值 小练习:定义一个函数func,传入两个数字,返回两个数字的最大值和平均值 def func(x,y):     if x>y:         return x,(x+y)/2     else:         return y,(x+y)/2 x=6 y=3 print func(x,y) 执行结果: /usr/bin/python2.7 /home/kiosk/PycharmProjects/pythonbasic/13.py (6, 4)            ###由此可见,返回多个值,实际上是返回一个元组### Process finished with exit code 0 ###返回的元组的括号可以省略,函数调用接受返回值时,按照位置赋值变量### def func(x,y):     if x>y:         return x,(x+y)/2     else:         return y,(x+y)/2 x=6 y=3 avg,maxnum = func(x,y) print avg,maxnum 执行结果: /usr/bin/python2.7 /home/kiosk/PycharmProjects/pythonbasic/13.py 6 4 Process finished with exit code 0 ###函数的参数### def power(x,n=2):    ###设定n默认为2,则n为默认参数,x为必选参数###     return x**n print power(2) def power(x,n=2):     return x**n print power(2,4)    ###也可以进行多次操作### ####当默认参数和必选参数同时存在时,一定要将必选参数放在默认参数之前### ###设置默认参数时,把变化大的参数放前面,变化小的参数放后面,将变化小的参数设置为默认参数### def enroll(name,age=22,myclass="westoslinux"):     print 'name=%s'% name     print 'age:%d'% age     print 'class:%s' %myclass enroll('user1') enroll('user2',20) enroll('user3',18,'全能班') 执行结果: name=user1 age:22 class:westoslinux name=user2 age:20 class:westoslinux name=user3 age:18 class:全能班 Process finished with exit code 0 ###默认参数必须使不可变的数据类型### 例: 先定义一个函数,传入一个 list,添加一个END 再返回 def fun(li=[]):     li.append("END")     return li print fun([1,2,3]) print fun() print fun() 执行结果: /usr/bin/python2.7 /home/kiosk/PycharmProjects/pythonbasic/14.py [1, 2, 3, 'END'] ['END'] ['END', 'END']        ###因为列表是可变的数据类型,所以在第二次输入print    fun()时,默认参数就不是空,而已经有了一个“END”### Process finished with exit code 0 更改为:li=None,则此时li的默认值为不可变的数据类型 def fun(li=None):     if li is None:         return ['END']     li.append('END')     return li print fun([1,2,3]) print fun() print fun() 执行结果为: /usr/bin/python2.7 /home/kiosk/PycharmProjects/pythonbasic/14.py [1, 2, 3, 'END'] ['END'] ['END'] Process finished with exit code 0 ####可变参数### 定义参数时,形参可以为*args,使函数可与接受多个参数; 如果想要将一个列表或者元组传入参数,也可以通过*li或*t,将参数传入函数里。 def fun(*args):        ###参数前面一定要加*###     print type(args)     return max(args),min(args) li = [1,42,3,14,58,6] print fun(*li)        ###传递列表时,前面也要加*### 执行结果: /usr/bin/python2.7 /home/kiosk/PycharmProjects/pythonbasic/14.py <type 'tuple'> (58, 1) Process finished with exit code 0 ###若传递列表时,不加*号### def fun(*args):     print type(args)     return max(args),min(args) li = [1,42,3,14,58,6] print fun(li) 执行结果: /usr/bin/python2.7 /home/kiosk/PycharmProjects/pythonbasic/14.py <type 'tuple'> ([1, 42, 3, 14, 58, 6], [1, 42, 3, 14, 58, 6]) Process finished with exit code 0 ###传递多个数### def fun(*args):     print type(args)     return max(args),min(args) print fun(1,42,3,14,58,6) 执行结果: /usr/bin/python2.7 /home/kiosk/PycharmProjects/pythonbasic/14.py <type 'tuple'> (58, 1) Process finished with exit code 0 ###关键字可变参数### def enroll(name,age=22,**kwargs):     print 'name=%s'% name     print 'age:%d'% age     for k,w in kwargs.items():         print '%s:%s'%(k,w)     print type(kwargs) enroll('user3',myclass='运维班') 执行结果: /usr/bin/python2.7 /home/kiosk/PycharmProjects/pythonbasic/14.py name=user3 age:22 myclass:运维班 <type 'dict'> Process finished with exit code 0 参数定义优先级:必选参数>默认参数>可变参数>关键字参数 *arg,可变参数接受的是元组 **kwargs,关键字参数,接受的是字典 ###局部变量,只在函数内部生效,全局变量,在整个代码中生效###

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档