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

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

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

二.开发工具:pycharm

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

快捷键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了

五.语法

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+的整型除法返回浮点数,要得到整型结果用//

六、编码

由于计算机是美国人发明的,因此,最早只有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再传输到浏览器。

七、一些存储结构

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可以做数学意义上的交集、并集等操作。

八、函数

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

最新文章

  1. MQTT服务器搭建-mosquitto1.4.4安装指南
  2. 安卓Android面试题大全
  3. OC基础--关键字@property 和 @synthesize
  4. 时间管理-SMART原则
  5. 获取其它进程窗口中的状态栏信息(FindWindowEx GetWindowThreadProcessId OpenProcess SendMessage轮番轰炸)
  6. mysql修改表和列
  7. Centos7 编译安装 Nginx Mariadb Asp.net Core2 (实测 笔记 Centos 7.3 + Openssl 1.1.0h + Mariadb 10.3.7 + Nginx 1.14.0 + Asp.net. Core 2 )
  8. spring-mvc里的 &lt;mvc:resources&gt; 及静态资源访问
  9. ryzen nvidia hackintosh
  10. vue报错:/node_modules/babel-loader/lib!./node_modules/vue-loader/lib/selector.js?
  11. python字典遍历的几种方法
  12. poj2018 二分+线性dp好题
  13. linux centOS服务器部署ssh,免密码登陆linux
  14. 2017/05/20 java 基础 随笔
  15. 对比jQuery和AngularJS的不同思维模式
  16. PHP DES加解密
  17. C语言的角落——C之很常使用特性(一)
  18. Apache HttpComponents 如何在正常结束前中止一个HTTP请求
  19. 2016-2017 ACM-ICPC CHINA-Final Solution
  20. LeetCode OJ:Isomorphic Strings(同构字符串)

热门文章

  1. ngrok内网穿透神器
  2. echarts中,y轴文本倾斜
  3. asp xml对象转换为string
  4. echarts样式修改
  5. Linux文件系统简介及常用命令
  6. Linux修改SSH端口和禁止Root远程登陆
  7. NameCheap域名注册商的几个特点介绍
  8. Python统计栏目页面数量
  9. 在Windows上安装MySQL(免安装ZIP版)
  10. springMVC+Java验证码完善注册功能