python2.7学习记录

一.两个学习网址(2.7已通过时,建议直接学习3)html

http://blog.csdn.net/longxibendi/article/details/41949215python

http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000linux

二.开发工具:pycharm算法

破解参考http://www.cnblogs.com/evlon/p/4934705.htmlwindows

快捷键http://www.cnblogs.com/zhangpengshou/p/3555767.html数组

三.python切换到指定目录:使用os包的chdir函数可以改变当前工做路径,linux和windows操做系统中并无区别。浏览器

import os
#获取当前工做目录
>>>os.getcwd()
#更改当前工做目录
>>>os.chdir('d:\')
>>>os.getcwd()

四.打印中文:开头加上#coding=utf-8 就ok了服务器

五.语法app

1.>>>python hello.py
File "<stdin>", line 1 python hello.py
SyntaxError:invalid syntax
出错是由于你已经进入python解释器,而不是 在cmd环境里
若是要运行helloworld.py这个文件,你须要在cmd里直接运行。
显示是这样的C:\Users\Administrator\Desktop>python hello.py函数

2.raw_input,可让用户输入字符串,并存放到一个变量里。好比输入用户的名字:>>> name = raw_input(),3+的版本用input()代替了raw_input()
name = raw_input('please enter your name: ')
print 'hello,', name

3.用r''表示''内部的字符串默认不转义
用'''...'''的格式表示多行内容
空值是Python里一个特殊的值,用None表示

在Python中,等号=是赋值语句,能够把任意数据类型赋值给变量,同一个变量能够反复赋值,并且能够是不一样类型的变量。这种变量自己类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,若是赋值的时候类型不匹配,就会报错。

理解变量在计算机内存中的表示也很是重要。当咱们写:a = 'ABC'时,Python解释器干了两件事情:
在内存中建立了一个'ABC'的字符串;
在内存中建立了一个名为a的变量,并把它指向'ABC'。
也能够把一个变量a赋值给另外一个变量b,这个操做其实是把变量b指向变量a所指向的数据。
Python支持多种数据类型,在计算机内部,能够把任何数据都当作一个“对象”,而变量就是在程序中用来指向这些数据对象的,对变量赋值就是把数据和变量给关联起来。

在Python中,一般用所有大写的变量名表示常量

整数除法永远是整数,即便除不尽。要作精确的除法,只需把其中一个整数换成浮点数作除法就能够。。3+的整型除法返回浮点数,要获得整型结果用//

6、编码

因为计算机是美国人发明的,所以,最先只有127个字母被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码。

全世界有上百种语言,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。所以,Unicode应运而生。Unicode把全部语言都统一到一套编码里,这样就不会再有乱码问题了。

如今,捋一捋ASCII编码和Unicode编码的区别:ASCII编码是1个字节,而Unicode编码一般是2个字节。

若是把ASCII编码的A用Unicode编码,只须要在前面补0就能够,所以,A的Unicode编码是00000000 01000001。新的问题又出现了:若是统一成Unicode编码,乱码问题今后消失了。可是,若是你写的文本基本上所有是英文的话,用Unicode编码比ASCII编码须要多一倍的存储空间,在存储和传输上就十分不划算。

因此,本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不一样的数字大小编码成1-6个字节,经常使用的英文字母被编码成1个字节,汉字一般是3个字节,只有很生僻的字符才会被编码成4-6个字节。若是你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间。

如今计算机系统通用的字符编码工做方式:在计算机内存中,统一使用Unicode编码,当须要保存到硬盘或者须要传输的时候,就转换为UTF-8编码。用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件;浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器。

7、一些存储结构

1.Python内置的一种数据类型是列表:list。list是一种有序的集合,能够随时添加和删除其中的元素。用len()函数能够得到list元素的个数。用-1作索引,直接获取最后一个元素。
list里面的元素的数据类型能够不一样,list元素也能够是另外一个list,空list如 L = []长度为0
追加 classmates.append('Adam')
插入 classmates.insert(1, 'Jack')
删除list末尾的元素,用pop()方法 classmates.pop()
删除指定位置i的元素,用pop(i)方法 classmates.pop(1)
某个元素替换成别的元素,能够直接赋值给对应的索引位置 classmates[1] = 'Sarah'

2.另外一种有序列表叫元组:tuple。tuple和list很是相似,可是tuple一旦初始化就不能修改。tuple的每一个元素的指向永远不变。

3.dict全称dictionary,在其余语言中也称为map,使用键-值(key-value)存储,具备极快的查找速度。
为何dict查找速度这么快?由于dict的实现原理和查字典是同样的。假设字典包含了1万个汉字,咱们要查某一个字,一个办法是把字典从第一页日后翻,直到找到咱们想要的字为止,这种方法就是在list中查找元素的方法,list越大,查找越慢。第二种方法是先在字典的索引表里(好比部首表)查这个字对应的页码,而后直接翻到该页,找到这个字,不管找哪一个字,这种查找速度都很是快,不会随着字典大小的增长而变慢。dict就是第二种实现方式,给定一个名字,好比'Michael',dict在内部就能够直接计算出Michael对应的存放成绩的“页码”,也就是95这个数字存放的内存地址,直接取出来,因此速度很是快。你能够猜到,这种key-value存储方式,在放进去的时候,必须根据key算出value的存放位置,这样,取的时候才能根据key直接拿到value。

和list比较,dict有如下几个特色:查找和插入的速度极快,不会随着key的增长而增长;须要占用大量的内存,内存浪费多。
而list相反:查找和插入的时间随着元素的增长而增长;占用空间小,浪费内存不多。
因此,dict是用空间来换取时间的一种方法。这个经过key计算位置的算法称为哈希算法(Hash)。要保证hash的正确性,做为key的对象就不能变。在Python中,字符串、整数等都是不可变的,所以,能够放心地做为key。而list是可变的,就不能做为key。最经常使用的key是字符串。

为何dict须要的内存要比list的多 内存中是怎么保存key与value的:列表应该能够数组,能够链表,由于它能够存取,也能够添加删改。 字典的话,应该是链表的数组吧。key值应该是哈希表,value存放应该没有关系,根据key值能够计算出value 存放的地址,那么必然在key值里还存放着另外的内容,即特别的内容来计算对应value的内存地址,因此须要的空间就多-静水汤汤

4.set和dict相似,也是一组key的集合,但不存储value。因为key不能重复,因此,在set中,没有重复的key,重复元素在set中自动被过滤。经过add(key)方法添加元素到set中,经过remove(key)方法删除元素。set能够当作数学意义上的无序和无重复元素的集合,所以,两个set能够作数学意义上的交集、并集等操做。

 8、函数

1.抽象是数学中很是常见的概念,举个例子: 计算数列的和,好比:1 + 2 + 3 + ... + 100,写起来十分不方便,因而数学家发明了求和符号∑
借助抽象,咱们才能不关心底层的具体计算过程,而直接在更高的层次上思考问题。写计算机程序也是同样,函数就是最基本的一种代码抽象的方式。函数名其实就是指向一个函数对象的引用,彻底能够把函数名赋给一个变量,至关于给这个函数起了一个“别名”。

2.在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,而后,在缩进块中编写函数体,函数的返回值用return语句返回。
咱们以自定义一个求绝对值的my_abs函数为例:
def my_abs(x):
    if x >= 0:
        return x
    else:
        return -x

3.若是想定义一个什么事也不作的空函数,能够用pass语句:
def nop():
    pass
pass语句什么都不作,那有什么用?实际上pass能够用来做为占位符,好比如今还没想好怎么写函数的代码,就能够先放一个pass,让代码能运行起来。
pass还能够用在其余语句里,好比:
if age >= 18:
    pass
缺乏了pass,代码运行就会有语法错误。

4.对参数类型作检查,只容许整数和浮点数类型的参数。数据类型检查能够用内置函数isinstance实现
def my_abs(x):
    if not isinstance(x, (int, float)):
        raise TypeError('bad operand type')
    if x >= 0:
        return x
    else:
        return -x

5.在语法上,返回一个tuple能够省略括号,而多个变量能够同时接收一个tuple,按位置赋给对应的值,因此,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。

6.使用默认参数有什么好处?最大的好处是能下降调用函数的难度。如学生注册时不须要提供年龄和城市,只提供必须的两个姓名和密码,只有与默认参数不符的学生才须要提供额外的信息。默认参数必须指向不变对象!缘由:Python函数在定义的时候,默认参数L的值就被计算出来了,即[],由于默认参数L也是一个变量,它指向对象[],每次调用该函数,若是改变了L的内容,则下次调用时,默认参数的内容就变了,再也不是函数定义时的[]了。如默认参数是[],可是函数彷佛每次都“记住了”上次添加了'END'后的list。
def add_end(L=[]):
    L.append('END')
    return L

7.可变参数:Python容许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去。
def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum

8.可变参数容许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数容许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。示例 def person(name, age, **kw)
关键字参数有什么用?它能够扩展函数的功能。好比,在person函数里,咱们保证能接收到name和age这两个参数,可是,若是调用者愿意提供更多的参数,咱们也能收到。试想你正在作一个用户注册的功能,除了用户名和年龄是必填项外,其余都是可选项,利用关键字参数来定义这个函数就能知足注册的需求。

9.参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数。如 def func(a, b, c=0, *args, **kw)在函数调用的时候,Python解释器自动按照参数位置和参数名把对应的参数传进去。对于任意函数,均可以经过相似func(*args, **kw)的形式调用它,不管它的参数是如何定义的。
>>>func(1, 2, 3, 'a', 'b', x=99)
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 99}
10.尾递归防止栈溢出,没好好看。http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00137473836826348026db722d9435483fa38c137b7e685000
相关文章
相关标签/搜索