Python 系统总结与快速入门(1)
2017-06-04 02:19
471 查看
作为一名java程序猿,一直想搞搞python,却从来都是学了忘,忘了学。
在网上看了廖雪峰老师的教程,觉得还是很不错的,有兴趣的可以去看看。
基于上面的教程,做了个简单的提纲,便于自己回忆。
基础
数据结构
字符编码
List与truple
list abc
truple abc
执行逻辑
dict与set
dict
set
其他
函数
参数
递归与溢出
其他特性
切片
迭代
列表生成
生成器
迭代器
函数式编程
概述
高阶函数
mapreduce
filter
sort
返回函数与懒加载
装饰器
偏函数
模块
作用域
模块安装
模块搜索
面向对象
IO
进程
模块
Web开发
!/usr/bin/env python3
-- coding: utf-8 --
def f1(a, b, c=0, *args, **kw):
print(‘a =’, a, ‘b =’, b, ‘c =’, c, ‘args =’, args, ‘kw =’, kw)
def f2(a, b, c=0, *, d, **kw):
print(‘a =’, a, ‘b =’, b, ‘c =’, c, ‘d =’, d, ‘kw =’, kw)
在网上看了廖雪峰老师的教程,觉得还是很不错的,有兴趣的可以去看看。
基于上面的教程,做了个简单的提纲,便于自己回忆。
基础
数据结构
字符编码
List与truple
list abc
truple abc
执行逻辑
dict与set
dict
set
其他
函数
参数
递归与溢出
其他特性
切片
迭代
列表生成
生成器
迭代器
函数式编程
概述
高阶函数
mapreduce
filter
sort
返回函数与懒加载
装饰器
偏函数
模块
作用域
模块安装
模块搜索
面向对象
IO
进程
模块
Web开发
基础
数据结构
整型 浮点数 字符串 空值 ⇒ none 变量 ⇒ 引用关系 常量 ⇒ 全部大写的变量名表示常量(习惯) 除法 ⇒ 注意 **/** 与 **//** 的区别
字符编码
ASCII ⇒ GB2312 ⇒ Unicode ⇒ UTF-8 ASCII同时也是UTF-8的一种 计算机内存统一使用Unicode,当要存储或传输,转为UTF-8 浏览网页时,服务器将Unicode转为UTF-8传输到客户端 在Python中,字符串以Unicode编码 在编写代码时候,为了避免中文乱码,可以指定为UTF-8
!/usr/bin/env python3
-- coding: utf-8 --
List与truple
list [a,b,c]
可以增删修改元素,append() pop() len()
truple (a,b,c)
一旦初始化则不能修改,但其实不能变的只是结构,具体引用的内容时可变的,换句话说只是元素指向不变
执行逻辑
if...elif..else while for..in.. break, continue
dict与set
dict
定义:d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} get(用get,当不存在时不会报错) pop 方法
set
定义:s = set([1, 2, 3]) add remove
其他
input()获取的是string对象,如果需要处理还需转换
函数
定义函数 def, 空函数时可用pass,输入参数类型检测可以用isinstance(x, (int, float))。返回多个值时 return a,b 实际返回truple的对象
参数
默认参数,注意***默认参数必须指向不可变对象***,因为在函数定义时默认参数的值已经被计算出,如果函数改变了参数的值,在下一次调用时这个值也会是被改变的。 可变参数,def calc(*numbers) 。当需要将list或者truple传入,则在她们前面加\*即可。 关键字参数,def person(name, age, **kw)。kw传入key-value对。 命名关键字参数,如果要限制关键字参数的名字,就可以用命名关键字参数,def person(name, age, *, city, job),\*后面的参数被视为命名关键字参数。 参数组合,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
def f1(a, b, c=0, *args, **kw):
print(‘a =’, a, ‘b =’, b, ‘c =’, c, ‘args =’, args, ‘kw =’, kw)
def f2(a, b, c=0, *, d, **kw):
print(‘a =’, a, ‘b =’, b, ‘c =’, c, ‘d =’, d, ‘kw =’, kw)
递归与溢出
其他特性
切片
迭代
for...in...。dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()。用isinstance('abc', Iterable)判断是否可进行迭代。for i, value in enumerate(['A', 'B', 'C']) 可以对下标进行迭代
列表生成
[x * x for x in range(1, 11) if x % 2 == 0]。其实已经比较类似java8的特性了。、
生成器
用来处理无限循环的类型 1. 把列表生成的[]换成(), g = (x * x for x in range(10)), next(g)或者for n in g 2. 函数return改为yield
迭代器
注意使用迭代器是不知道迭代对象的长度,只能通过不断next来寻找。
函数式编程
(这里已经非常类似java8了)概述
变量可以指向函数,通过变量名即可调用函数。 函数名同时也是变量,可以作为参数传递。 函数可以接受函数为变量。
def add(x, y, f): return f(x) + f(y) f=abs #求绝对值
高阶函数
lambda表达式,匿名函数,下面例子多为lambda表达式。map/reduce
from functools import reduce list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9])) reduce(add, [1, 3, 5, 7, 9]) ########### def char2num(s): return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, < 4000 span class="hljs-string">'7': 7, '8': 8, '9': 9}[s] def str2int(s): return reduce(lambda x, y: x * 10 + y, map(char2num, s))
filter
print(list(filter(lambda x:x>3, [1,2,3,4,5])))
sort
sorted([36, 5, -12, 9, -21], key=abs) sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower) sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)
返回函数与懒加载
函数不需要立即求值,需要在后面的计算中进行求值,所以函数的返回值是一个函数。换言之,函数调用两次才出结果
def lazy_sum(*args): def sum(): ax = 0 for n in args: ax = ax + n return ax return sum f = lazy_sum(1, 3, 5, 7, 9) # 此时返回一个函数 f() # 此时计算最终结果
当返回函数包含内部变量时,返回函数的内部变量还会被新函数所使用。 返回函数时,计算并未执行,而是调用到最终函数才会执行。
装饰器
这部分我觉得还是挺好玩的。wrapper函数是封装函数。 封装函数需要被定义为wrapper函数。 wrapper的参数定义应该是(*args, **kw),因此,wrapper()函数可以接受任意参数的调用。 如果需要装饰器decorator本身有参数传入,则需要编写一个返回decorator的高阶函数。
#函数添加内容 def showName(func): def wrapper(): print("Before function exec: ") return func() return wrapper # 通过注解使用装饰起 @showName def func(): print("Function execution") #decorator传入参数 def log(text): def decorator(func): print("This is "+ text + "log \nFunction is:" +func.__name__) def wrapper(): print("This is wrapper") return func(); return wrapper return decorator @log('rudi') def fun(): print("Function execution") fun()
偏函数
functools.partial的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单
import functools # 传函数,给参数 int2 = functools.partial(int, base=2)
模块
作用域
类似__xxx__这样的变量是特殊变量,可以被直接引用,但是有特殊用途,比如上面的__author__,__name__就是特殊变量,hello模块定义的文档注释也可以用特殊变量__doc__访问,我们自己的变量一般不要用这种变量名; 类似_xxx和__xxx这样的函数或变量就是非公开的(private),不应该被直接引用,比如_abc,__abc等; 也就是说__XXX的函数是private函数。
# 通过调用greeting函数调用内部private函数 def _private_1(name): return 'Hello, %s' % name def _private_2(name): return 'Hi, %s' % name def greeting(name): if len(name) > 3: return _private_1(name) else: return _private_2(name)
模块安装
pip install Pillow 其他常用的第三方库还有MySQL的驱动:mysql-connector-python 用于科学计算的NumPy库:numpy 用于生成文本的模板工具Jinja2
模块搜索
1. 一是直接修改sys.path,添加要搜索的目录: import sys sys.path.append('/Users/michael/my_py_scripts') 2. 设置环境变量PYTHONPATH,该环境变量的内容会被自动添加到模块搜索路径中。
面向对象
IO
进程
模块
Web开发
相关文章推荐
- Python NLPIR(中科院汉语分词系统)的使用 十五分钟快速入门与完全掌握
- python入门: 快速python语法总结
- 关于win10 64位系统下vs2013与python2.7环境下caffe的配置工作入门工作总结
- python学习总结一(快速入门)
- 金牌讲师个人总结-嵌入式快速入门诀窍!
- Redis快速入门:Key-Value存储系统简介
- Python 学习(二)【快速入门】
- Python快速入门
- 系统管理员快速入门
- Metro Style App开发快速入门 之基本控件使用总结
- Thinking In Python(Bruce Eckel) 程序员的Python快速入门
- Python 快速入门
- 应用Python快速实现系统原型
- 系统管理员快速入门
- 计算机系统管理员快速入门方法
- python 快速入门
- python快速入门教程
- 基于AJAX技术的WebGis系统实践 (1. 快速入门)
- 系统管理员快速入门
- python html parser库lxml的介绍和使用(快速入门)