专栏首页python3python基础3

python基础3

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,关键字参数,接受的是字典 ###局部变量,只在函数内部生效,全局变量,在整个代码中生效###

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • CRM product model的用法

    This issue introduces basic functionality of product model in CRM WebClient UI, ...

    Jerry Wang
  • 继续死磕前端

    今天要说的便是 jquery 这个函数库,毕竟它影响范围之广,不会都不好意说自己会前端?

    小闫同学啊
  • JavaScript停止冒泡和阻止浏览器默认行为

    w3c的方法是e.stopPropagation(),IE则是使用e.cancelBubble = true

    仙士可
  • 聊个程序员的话题

    最近看几个微信群的气氛很不对,大家也不要气馁,我们聊个程序员的话题,这是我对程序员的认识,希望对找工作的朋友或即将从事这一行的朋友,有所启发。

    icepy
  • Vue CLI 引入 bootstrap4

    当前安装的是版本是 bootstrap@4.1.3 ,可能随着版本变化,应该会有所升级

    hedeqiang
  • day88-Vue基础-路由系统、重定向、钩子函数

    天下第六
  • jQuery判断当前元素是第几个元素&获取第N个元素

    如果我们点击任何一个li标签,想知道当前点击的是第几个li标签,可以使用下面的代码:

    仙士可
  • 分享一个好用的触摸事件插件touchswipe

    http://labs.rampinteractive.co.uk/touchSwipe/demos/

    仙士可
  • 文本域实现图片拖拽上传

    相信你看到过不少文件拖拽上传的功能,很多论坛、社区比比皆是。所以今天就来操作一番。

    hedeqiang
  • jqueryFormData上传文件

    <form id="form" action="" method="POST" enctype="multipart/form-data" onsubmit="...

    93年的老男孩

扫码关注云+社区

领取腾讯云代金券