您的位置:首页 > 编程语言 > Python开发

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开发

基础

数据结构

整型
浮点数
字符串
空值 ⇒ 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