python成长记(一)

python成长记(一)

蜗牛之前是学过一点python的,不过只是学过而已看,时间长不用基本多忘了。

为了做毕设,要学习flask框架,觉得最好还是把python再过一遍。

可能觉得蜗牛东一头西一头的,看的东西太多。可是蜗牛有什么办法,我也很绝望啊!

还是静下心来看书吧,蜗牛会住上别墅的,蜗牛会开上豪车的……

——————我是华丽的分割线————-——————————

1.一个.py文件就是一个python模块(多数情况下)。有的时候,一个文件中包含多个模块。
2.导入模块的两种方式:

第一种:
>>>import myfile
>>>print myfile.title

上面是把文件整个的导入了
第二种:
>>>from myfile import title
>>>print title

from的本质其实是拷贝。

3.python有很多内置的对象。而且大多数情况下,内置对象都比自己写的对象好用。像int这种东西在python中是对象。
4.自己设计对象的时候,通常建立在列表和字典之上。因为python是脚本语言,你别指望他和c++比肩。

python中的内置对象

python是一种弱类型语言,可能学过c++的童鞋总是会不自觉地强加类型的概念。
比如:

haha=123

总有刁民觉得haha是个int类型的变量。

python:你开心就好,我无所谓。

python的内置对象:

Number(数字) 123,3.14,,999L
String(字符串)
List(列表)
Dictionary(字典)
Tuple(元组)
File(文件)

第一个要学习的内置对象就是

数字

这个其实没啥讲的,讲了也都是概念性的问题,具体用的时候再说。

python针对数字对象还提供了一系列的内置函数和模块,如:

  • pow,abs内置数学函数
  • rand,math内置的模块。
  • 学好内置模块是一件非常有用的事情
内置模块的使用栗子

>>>import math  #注意这句话,使用math这样的内置模块一定要导入。
                #但是使用abs()这样的内置函数就不用导入了,因为在名字空间中。
>>>math.pi
3.141925653
>>>abs(-42)
python的表达式操作和预处理
  • lambda args:匿名函数
  • is,not is:身份测试,(identity,即地址)
  • in,not in(在不在一个序列中)
  • 其实和Java中提供的String对象有点儿像。
  • python中没有char类型。一个string随便。
string 字符串

python字符串支持分片啊啥的,有很灵活的用法。
其实String表示的是被称为序列的对象的较大的类。

字符串支持分片slice,索引index,合并等等。regex和re模块为字符串添加了正则表达式的匹配。
这个操作:

>>> name="Simon"
>>>name*3
>上面的代码是将name输出了三次。
>>>len(name)
>输出长度
>>>"abc"+"cde"
>合并字符串
>为什么我总觉得迭代和遍历是一样的?
>>>myjob="hacker"
>>>for c in myjob:
>>>      print c
>这不就是个遍历么,还说的递归那么夸张。

字符串的定义是有序的字符集合,所以可以通过位置访问他们的内容。其实这一点和c++差不多,c++有人理解为师char的数组,其实一样。

最大的一点不同是python支持负索引,就是负索引是从-1来的。

s=”name”
s[-1]
结果是e

这个解释比较好:负索引其实是默认加了一个长度

S[-2]其实和S[len(s)-2]

就是默认加了一个长度,省略了而已。

关于string的用法蜗牛之前写过文章,就不说了。

注意string是不可变序列,要想改变string就去重新生成一个新的string。

格式化输出:
>>>name="hahah"
>>>"my name is %s" %name
这样那么就嵌入进去了。%s是字符串占位符的意思 
格式化输出还有很多用法

>>>"%s--%s--%s" %("haha","hehe","lala")
>>>"%s--%s--%s" %(43,123.54,[1,2,3])
上面这个就有趣多了,暗地里其实做了类型转换。

上面这个43放到%s的位置的时候会转化为string的类型,只是感觉不到罢了,你的感觉是只是把这个东西输出了,没毛病。

string内置提供了一堆函数,比如转化为大写什么的,有空看看。

列表

列表其实就是收集其他对象的地方。也就是一个数组,如果你还是脱不开c++的阴影的话。
注意列表是有顺序的

列表的特点:
-列表是有序的,那就能通过索引去访问了,那就能分片了。
-列表式可变长度,异构,任意嵌套。列表的长度是可变的,增加减元素都可以,而且是异构的,则代表列表中的元素可以使不一样的。
-列表里面的元素也是可变的,也就是说支持索引赋值。

之前这样是不对的,有错:
>>>name="hello"
>>>name[2]="a"
>会有错
>但是这样
>name=["haha","jehe"]
>name[1]="hiehie"
>就是可以的。

之前说过string是一个大类“序列”,其实列表list也是一个序列。
只不过string这种序列是不变的,而list这种序列是可变的

另外注意的一点,如果不是你自己多事儿,一般你用的都是对象的引用。
你把一个对象放到数组中,python存储的都是一个对象的引用。都是解释器屏蔽掉了细节。

列表的常见方法:

  • L2.sort()列表排序
  • L2.reverse()列表翻转。
  • L2[i]=l索引赋值
  • L2[i:j]=[4,5,6]分片赋值。注意后边是[],因为你是为数组赋值的啊。

如果把列表看作是一个序列,那列表和string很多同样的属性就看出来了,那其实就很好理解了。
只是这里的粒度应该就是列表里面的元素了。

这里再提醒一次,列表是可变的对象,可以原位修改,但是字符串是不可变对象元组也是。

字典

刚才说列表是python内置的最有弹性的数据类型,这里又说了,字典是出了list之外的最有弹性的数据类型。

如果你把列表认为是有序的集合,那列表就是无序的对象集合。

其实两者本来也不一样,字典是key-value键值对,一对一对的是无序的。存取的时候都是通过key,不是偏移量。

字典可以在原位增长或是缩短,应该也可以原位修改,只是是通过key去找的。

字典是唯一内置的映射类型,将键映射到值。

字典里面的元素是无序的,解释器通过特殊的方法来寻找里面的键,进而找到value,你就知道这很快就行了,怎么找键的真的不用关心,里面的学问老大了。

常见的字典操作:

d1={}空的字典
d2={"span":2,"ahha":2}   对,里面的key值就是要有双引号的。
d3=["spen"]通过键访问
d2.has_key("egg")判断时候有egg这个键值?
d2.keys()返回的是d2中的所有的键值的列表
d2.values()返回的是d2中的所有的值的列表
len(d2)返回d2里面有几个key-value键值对
d2["egg"]="haha"原位修改
del d2[key]删除元素。
不过这里面的key值加不加引号我就得去具体的看看了
我看了,是加的。
d2["egg"]="balalala"
里面的key值也是要加双引号的。

于是就出现了下面这种用法:

d2={"haha":"123",
    "hehe":"456"}
language="haha"
print d2[language]

输出的应该是"123"
但是print d2["language"]是错的。

字典是可以改变的,字典可以改变,扩展,缩小而无需生成一个新的字典。

字典为什么不能进行有序的访问什么的?
是因为字典本身就 不是个序列啊!他只是个映射而已。
而且键也不一定非得是字符串,因为数字也可以是键。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值