Python -- 基础

来源:互联网 发布:linux 磁盘空间不足 编辑:程序博客网 时间:2024/06/03 22:55

最近还在考试,紧张的4天考了7课,然后就是放了7天假,等待考大物,时间这么多,前几天也没复习,最近才刚开始复习。。

好吧,我承认我前几天看了EventBus,了解了这个库的使用和源码。不仅感叹是多么好用,但又不能滥用的库。。。是有点悲催,不过没有上手练习,毕竟看了很多篇文章,例子都能理解,用法确实简单,源码也能理解一二。所以等考试完的项目上再用,哈哈直接上手。

本来我很多计划都是打算寒假开始的,EventBus算是其一,看完EventBus,感觉没什么干,看了下鸿洋大神设配,虽然说好用,但是要继承他的Activity,所以等深入学习View后,结合源码,再看能不能装饰一个Activity出来,好了,非常简单的看了一下下设配,觉得还是没事干,还是看一下我计划中的RxJava,果然一下子就把我蒙了,有点难理解,源码又那么多又复杂,看了许久,重头再看一遍使用,非常非常勉勉强强,确实很难入手,然而,不知为何,我把RxJava搁一边了,看起计划之一的Python。。No,于是有了这篇文章,记录我的Hello World!。

记得学Java的时候很痛苦,估计有一个多月快两个月(寒假跟上学期间),可是到了现在,看了点《Java编程思想》,设计模式。记得我的大一第一学期的C在期末时还在敲函数,指针,结构体的代码,现在代码还保留着。可以可以

这几天学Python,语言基础上手很快,虽然有些新用法,但是还是出乎意外,接下来呢,要么赶紧看完Python的处理IO和数据库这方法的。要么就得阁下了。T^T。。毕竟数据结构的B树课设还没怎么写。。

开发环境搭建

步骤:

  • 官网下载Python
  • 设置环境变量:Path –> Python所在路径
  • 在命令行中输入python查看是否安装完成,完成即可敲代码

eclipse配置python :

  • 在Help菜单栏install new software,点击Add,输入PyDev - http://pydev.org/updates,再点击第一项pydev,安装过程中会弹出一个框,打勾ok,完成后即可创建Python项目

pyCharm :
- 官网下载pyCharm并安装
- 要收费,所以我使用的注册方式是:在注册时选择 License server ,填 http://idea.lanyus.com ,然后点击 OK
- 另一种方式(没尝试): 安装后,调整时间到2038年。申请30天试用,退出pycharm, 时间调整回来。

基本数据类型

我把Python的基本数据类型独有的特点写成代码形式理解,直接结合注释看代码:

# coding=utf-8# Python编码为ASCII,如果没有上面语句,可能不支持中文注解# 基本数据类型a = 1000000000000000000     # Python可以处理任意大小的整数print aa = 'abc'   # or a = "abc"print aa = u'中文字符串'print aa = True or False   # and or notprint aa = Trueprint a and 'a=T' or 'a=F'  # 结果为a=T# 因为Python把0、空字符串''和None看成 False,其他数值和非空字符串都看成 True,所以:# True and 'a=T' 计算结果是 'a=T'# 继续计算 'a=T' or 'a=F' 计算结果还是 'a=T'# 要解释上述结果,又涉及到 and 和 or 运算的一条重要法则:短路计算。# 1. 在计算 a and b 时,如果 a 是 False,则根据与运算法则,整个结果必定为 False,因此返回 a;如果 a 是 True,则整个计算结果必定取决与 b,因此返回 b。# 2. 在计算 a or b 时,如果 a 是 True,则根据或运算法则,整个计算结果必定为 True,因此返回 a;如果 a 是 False,则整个计算结果必定取决于 b,因此返回 b。# a变量本身类型不固定的语言称之为动态语言# print会依次打印每个字符串,遇到逗号“,”会输出一个空格print 'The quick brown fox', 'jumps over', 'the lazy dog'print 'The quick brown fox'+'jumps over'+'the lazy dog'# 字符串包含 ' "print "I'm ok"print 'She said:"Hellow"'print 'She said:"I\'m ok"'# raw字符串 r'''...''' 字符内容不发生转义print '\'\n\"'print r'''\'\n\"'''# 多行字符串print '''Line 1\n..Line 2Line 3'''# 多行raw字符串print r'''Line 1\n..Line 2Line 3'''# Unicode字符串 最早的Python只支持ASCII编码,Python在后来添加了对Unicode的支持,以Unicode表示的字符串用u'...'表示# 如果中文字符串在Python环境下遇到 UnicodeDecodeError,这是因为.py文件保存的格式有问题。可以在第一行添加注释#   -*- coding: utf-8 -*-# 目的是告诉Python解释器,用UTF-8编码读取源代码。然后用Notepad++ 另存为... 并选择UTF-8格式保存。print '中文zhongwen'print u'中文'# 同理,多行Unicode字符串print u'''第一行第二行'''# Unicode+raw+多行:print ur'''第一行\n第二行'''

基本语句

这里看的是if和while和for语句,同样,看例子:

# coding=utf-8# if 语句age = 24if age>30:    print 'your age over 30'elif age>20:    print 'your age less 30 but over 20'else :    print 'less 20'#   注意: Python代码的缩进规则。具有相同缩进的代码被视为代码块,# for 循环L = ['Adam', 'Lisa', 'Bart']for name in L:    print name# while 循环N = 10x = 0while x < N:    print x    x = x + 1

数据结构

list

list是一种有序的集合,直接用 [ ] 把list的所有元素都括起来,就是一个list对象。

由于Python是动态语言,所以list中包含的元素并不要求都必须是同一种数据类型,我们完全可以在list中包含各种数据:

L = ['Michael', 100, True]

L[0],在使用索引时,千万注意不要越界

倒序访问List,

  • 俗称倒数第一,所以,我们可以用 -1 这个索引来表示最后一个元素:类似的,倒数第二用 -2 表示,倒数第三用 -3 表示,倒数第四用 -4 也要注意不要越界

添加元素

  • append()总是把新的元素添加到 list 的尾部。
  • insert()方法,它接受两个参数,第一个参数是索引号,第二个参数是待添加的新元素

删除元素

  • pop()方法总是删掉list的最后一个元素,并且它还返回这个元素
  • pop(2):把引用为2的删除

替换元素

L[2] = 'Paul'L[-1] = 'aa'

tuple

tuple 是另一种有序的列表,中文翻译为“ 元组 ”。但是,tuple 一旦创建完毕,就不能修改了

创建tuple和创建list唯一不同之处是用( )替代了[ ]

单元数 tuple
创建包含1个元素的 tuple 呢?来试试:

t = (1)print t# 结果:1

好像哪里不对!t 不是 tuple ,而是整数1。为什么呢?
因为()既可以表示tuple,又可以作为括号表示运算时的优先级,结果 (1) 被Python解释器计算出结果 1,导致我们得到的不是tuple,而是整数 1。

正是因为用()定义单元素的tuple有歧义,所以 Python 规定,单元素 tuple 要多加一个逗号“,”,这样就避免了歧义:

t = (1,)print t# 结果:(1,)

Python在打印单元素tuple时,也自动添加了一个“,”,为了更明确地告诉你这是一个tuple。

可变的 tuple

前面我们看到了tuple一旦创建就不能修改。现在,我们来看一个“可变”的tuple:

t = ('a', 'b', ['A', 'B'])

注意到 t 有 3 个元素:’a’,’b’和一个list:[‘A’, ‘B’]。list作为一个整体是tuple的第3个元素。list对象可以通过 t[2] 拿到,然后,我们把list的两个元素改一改:

L = t[2]L[0] = 'X'L[1] = 'Y'

再看看tuple的内容:

print t# ('a', 'b', ['X', 'Y'])

tuple所谓的“不变”是说,tuple的每个元素,指向永远不变
上述例子改成:t = ('a', 'b', ('A', 'B'))

dict

但是,要根据名字找到对应的成绩,用两个 list 表示就不方便。
如果把名字和分数关联起来,组成类似的查找表:
‘Adam’ ==> 95
‘Lisa’ ==> 85
‘Bart’ ==> 59
给定一个名字,就可以直接查到分数。

Python的 dict 就是专门干这件事的。用 dict 表示“名字”-“成绩”的查找表如下:

d = {    'Adam': 95,    'Lisa': 85,    'Bart': 59}

我们把名字称为key,对应的成绩称为value,dict就是通过 key 来查找 value。

花括号 {} 表示这是一个dict然后按照 key: value, 写出来即可。最后一个 key: value 的逗号可以省略。
由于dict也是集合,len() 函数可以计算任意集合的大小:

len(d)# 3

注意: 一个 key-value 算一个,因此,dict大小为3。

访问 dict

可以简单地使用 d[key] 的形式来查找对应的 value,这和 list 很像,不同之处是,list 必须使用索引返回对应的元素,而dict使用key:

print d['Adam']# 95print d['Paul']# Traceback (most recent call last):# File "index.py", line 11, in <module># print d['Paul']# KeyError: 'Paul'

注意: 通过 key 访问 dict 的value,只要 key 存在,dict就返回对应的value。如果key不存在,会直接报错:KeyError。
要避免 KeyError 发生,有两个办法:

  • 一是先判断一下 key 是否存在,用 in 操作符:如果 ‘Paul’ 不存在,if语句判断为False,自然不会执行 print d[‘Paul’] ,从而避免了错误。
if 'Paul' in d:    print d['Paul']
  • 二是使用dict本身提供的一个 get 方法,在Key不存在的时候,返回None:
print d.get('Bart')# 59print d.get('Paul')# None

dict 的特点

  • dict的第一个特点是查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降。不过dict的查找速度快不是没有代价的,dict的缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢

  • dict的第二个特点就是存储的key-value序对是没有顺序的!

  • dict的第三个特点是作为 key 的元素必须不可变,Python的基本类型如字符串、整数、浮点数都是不可变的,都可以作为 key。但是list是可变的,就不能作为 key。

更新 dict

d[key] = value
  • 如果 key 已经存在,则赋值会用新的 value 替换掉原来的 value,否则新建一个key-value

遍历 dict

for key in d:    print key    d.get(key)

set

s = set([‘A’, ‘B’, ‘C’])
s = set([‘A’, ‘B’, ‘C’, ‘C’])

set 持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的,

用 in 操作符判断元素是否在set中,跟dict一样

遍历 set – 顺序很可能是不同的

for name in s:    print name

更新 set

  • 添加元素时,用set的add()方法
  • 删除set中的元素时,用set的remove()方法,如果删除的元素不存在set中,remove()会报错,所以用add()可以直接添加,而remove()前需要判断

函数

函数的定义,返回值,返回多值,默认参数以及可变参数,见下面例子:

# coding=utf-8# 函数 -- 定义一个函数要使用 def 语句,依次写出函数名、括号、括号中的参数和冒号:# 如果没有return语句,函数执行完毕后也会返回结果,只是结果为 None。# return None可以简写为return。def my_abs(a):    if a > 0:        return    else:        return -aprint my_abs(-10)  # 10print my_abs(10)   # None# 返回多值import mathdef move(x, y, step, angle):    nx = x + step * math.cos(angle)    ny = y - step * math.sin(angle)    return nx, nyx, y = move(100, 100, 60, math.pi / 6)print x, y    # 151.961524227 70.0# 但其实这只是一种假象,Python函数返回的仍然是单一值:r = move(100, 100, 60, math.pi / 6)print r  # (151.96152422706632, 70.0) -- tuple#但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。# 定义默认参数# 函数的默认参数的作用是简化调用,你只需要把必须的参数传进去。但是在需要的时候,又可以传入额外的参数来覆盖默认参数值。# 由于函数的参数按从左到右的顺序匹配,所以默认参数只能定义在必需参数的后面:def power(x, n=2):    s = 1    while n > 0:        n = n - 1        s = s * x    return sprint  power(11)print  power(11,11)# 定义可变参数# Python解释器会把传入的一组参数组装成一个tuple传递给可变参数,因此,在函数内部,直接把变量 args 看成一个 tuple 就好了。def fn(*args):    print argsprint fn(1,2,3,'yyy',902.2)

切片

对这种经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符,能大大简化这种操作。直接看例子:

# coding=utf-8L = range(0,16)   # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]# 取前三个元素 L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。如果第一个索引是0,还可以省略print L[0:3]  # 3-0 = 3print L[:3]# 从索引1开始,取出2个元素print L[1:3]  # 3-1 = 2# 只用一个 : ,表示从头到尾.L[:]实际上复制出了一个新listprint L[:]# 切片操作还可以指定第三个参数,第三个参数表示每N个取一个print L[::2]    # [0, 2, 4, 6, 8, 10, 12, 14]print L[::3]    # [0, 3, 6, 9, 12, 15]print L[::4]    # [0, 4, 8, 12]# 3的倍数print L[3::3]   # [3, 6, 9, 12, 15]# 不大于50的5的倍数ls = range(0,101)print ls[5:51:5]    # [5, 10, 15, 20, 25, 30, 35, 40, 45, 50]# 倒序切片# 记住倒数第一个元素的索引是-1。倒序切片包含起始索引,不包含结束索引。L = ['Adam', 'Lisa', 'Bart', 'Paul']print L[-2:]   # ['Bart', 'Paul']print L[:-2]  # ['Adam', 'Lisa']print L[-3:-1]    # ['Lisa', 'Bart']print L[-4:-1:2]  # ['Adam', 'Bart']# 对字符串切片# 字符串 'xxx'和 Unicode字符串 u'xxx'也可以看成是一种list,每个元素就是一个字符。操作结果仍是字符串:print 'ABCDEFG'[:3]   # 'ABC'print 'ABCDEFG'[-3:]  # 'EFG'print 'ABCDEFG'[::2]  # 'ACEG'

迭代

例子:

# coding=utf-8# 迭代# Python中,迭代永远是取出元素本身,而非元素的索引。# 对于有序集合,元素确实是有索引的。有的时候,我们确实想在 for 循环中拿到索引,怎么办?# 方法是使用 enumerate() 函数:# 使用 enumerate() 函数,我们可以在for循环中同时绑定索引index和元素name。但是,这不是 enumerate() 的特殊语法。# 实际上,enumerate() 函数把:['Adam', 'Lisa', 'Bart', 'Paul']# 变成了类似:[(0, 'Adam'), (1, 'Lisa'), (2, 'Bart'), (3, 'Paul')]# 因此,迭代的每一个元素实际上是一个tuple:L = ['Adam', 'Lisa', 'Bart', 'Paul']for index, name in enumerate(L):    print index, '-', name# t 为 tuple 写成上面的形式类似函数返回多值for t in enumerate(L):    index = t[0]    name = t[1]    print index, '-', name# 迭代dict的value# dict 对象有一个 values() 方法,这个方法把dict转换成一个包含所有value的list# 还有一个 itervalues() 方法,用 itervalues() 方法替代 values() 方法,迭代效果完全一样:# 那这两个方法有何不同之处呢?#     1. values() 方法实际上把一个 dict 转换成了包含 value 的list。#     2. 但是 itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。d = {    'a':85,    'b':95,    'c':66}for v in d.values():    print v# 85# 95# 59for v in d.itervalues():    print v# 85# 95# 59# 迭代dict的key和value# items() 方法把dict对象转换成了包含tuple的list,我们对这个list进行迭代,可以同时获得key和value:# 和 values() 有一个 itervalues() 类似, items() 也有一个对应的 iteritems(),# iteritems() 不把dict转换成list,而是在迭代过程中不断给出 tuple,所以, iteritems() 不占用额外的内存。for k,v in d.iteritems():    print k,v# a 85# c 66# b 95

列表

直接看例子:

# coding=utf-8# 生成列表# 要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我们可以用range(1, 11)# range(1, 100, 2) 可以生成list [1, 3, 5, 7, 9,...]## 但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?# 一种做法L = []for x in range(1, 11):    L.append(x * x)print L# 列表生成式# 写列表生成式时,把要生成的元素 x * x 放到前面,后面跟 for 循环,就可以把list创建出来,十分有用,多写几次,很快就可以熟悉这种语法。L = [x * x for x in range(1, 11)]print L# 完全可以通过一个复杂的列表生成式把它变成一个 HTML 表格:# 注:字符串可以通过 % 进行格式化,用指定的参数替代 %s。字符串的join()方法可以把一个 list 拼接成一个字符串。# tds = ['<tr><td>%s</td><td>%s</td></tr>' % (name, score) for name, score in d.iteritems()]# print '<table>'# print '<tr><th>Name</th><th>Score</th><tr>'# print '\n'.join(tds)# print '</table>'# 条件过滤# 列表生成式的 for 循环后面还可以加上 if 判断。例如:# 如果我们只想要偶数的平方,不改动 range()的情况下,可以加上 if 来筛选:# 有了 if 条件,只有 if 判断为 True 的时候,才把循环的当前元素添加到列表中。L = [x * x for x in range(1, 11) if x % 2 == 0]print L     # [4, 16, 36, 64, 100]# 多层表达式# for循环可以嵌套,因此,在列表生成式中,也可以用多层 for 循环来生成列表。# 对于字符串 'ABC' 和 '123',可以使用两层循环,生成全排列:L = [m + n for m in 'ABC' for n in '123']print L     # ['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']# 翻译成循环代码就像下面这样:L = []for m in 'ABC':    for n in '123':        L.append(m + n)print L     # ['A1', 'A2', 'A3a', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']

总结

  • 以上Python的学习是我在网上学的,知识漏洞很多,所以等有时间买本书补补

如有不足或者错误之处,还请指出,谢谢!

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 ios网盘下载速度太慢怎么办 小米手机4x卡机了怎么办 小米手机4x屏幕点不动了怎么办 苹果手机连接u盘没反应怎么办 苹果官网储蓄卡分期额度不够怎么办 京东买东西发票信息填写错了怎么办 华为v9手机激活密码忘了怎么办 公司报销发票纸质的丢了怎么办 在京东上买的小天才手表坏了怎么办 美亚买东西过几天降价了怎么办 天猫买东西退款后又不想退了怎么办 自己写错了地址快递被签收了怎么办 在天猫购买东西不发货怎么办 在天猫买了东西不给我发货怎么办 天猫退货卖家收到货不退款怎么办 唯品会的账号找不回来了怎么办 从网上买的沙发物流超级慢怎么办 三星c5手机玩王者荣耀卡怎么办 买手机送话费的卡不想用了怎么办 到银行存钱被骗买保险了怎么办 去银行存钱被骗买了保险怎么办 京东申请退款后卖家又发货了怎么办 苹果6s没有4g网怎么办 花呗分期付款买手机额度不够怎么办 手机天猫不支持购买淘宝商品怎么办 天猫国际购买商品狠盾怎么办 在微信上微拍堂买东西被骗了怎么办 京东自营买到返修手机怎么办? 7p弯了怎么办能修复吗 农商银行app登录密码忘了怎么办 网址上的重庆时时彩不能提现怎么办 天天中彩票自己账户登录不了怎么办 天猫上卖王者荣耀的兑换码是怎么办 身份证借别人开淘宝永久封店怎么办 天猫店铺被扣12分怎么办 天猫法人变更之前的天猫贷款怎么办 在日本旅游遇到精日导游怎么办 银行资金交易异常卡被冻结怎么办 如果淘宝被盗了店铺乱上东西怎么办 快递不送货直接代售点签收怎么办 淘宝快递没收到却显示已签收怎么办