python总结(一)

这是我在学习python的过程中做的一些笔记,对一些我觉得学习过程中不太容易理解的概念,不太成体系,见谅!

1、python命令行
python -h
python -c cmd : program passed in as string (terminates option list)
python -m mod :  run library module as a script (terminates option list)

python一句话实现软件hash校验(来自余弦大大的懒人在思考)

MD5
python -c "import hashlib,sys;print hashlib.md5(open(sys.argv[1],'rb').read()).hexdigest()" Shadowsocks.exe

SHA-1
python -c "import hashlib,sys;print hashlib.sha1(open(sys.argv[1],'rb').read()).hexdigest()" Shadowsocks.exe

SHA-256
python -c "import hashlib,sys;print hashlib.sha256(open(sys.argv[1],'rb').read()).hexdigest()" Shadowsocks.exe

SHA-512
python -c "import hashlib,sys;print hashlib.sha512(open(sys.argv[1],'rb').read()).hexdigest()" Shadowsocks.exe
2、字符串<==>list

python 中字符串是不可更改的,list可以,两者互换的方法如下

>>> key = "helloworld"
>>> list = list(key)
>>> list
['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd']
>>> str = "".join(list)
>>> str
'helloworld'
3、使用virtualenv和virtualenvwrapper

python虚拟环境安装

sudo pip install virtualenv

安装后:
a.创建目录用来存放虚拟环境

mkdir $HOME/.virtualenvs

b.在~/.bashrc中添加行:

export WORKON_HOME=$HOME/.virtualenvs
find / -name virtualenvwrapper.sh #找到virtualenvwrapper.sh的路径
source 路径 #激活virtualenvwrapper.sh
source /usr/local/bin/virtualenvwrapper.sh

b.运行:

source ~/.bashrc
创建python虚拟环境
mkvirtualenv [虚拟环境名称]
workon [虚拟环境名称]

退出虚拟环境 离开 deactivate
删除(慎用)
rmvirtualenv [虚拟环境名称]

$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask

#!flask/bin/python
from flask import Flask

app = Flask(__name__)

@app.route('/')def index():
    return "Hello, World!"

if __name__ == '__main__':
    app.run(debug=True)
4、if/for常规和推导式写法
4.1、if

常规:

if a>b:
    c = a
else:
    c = b

表达式:
c = a if a>b else b

二维列表: c = [b,a][a>b]

4.2、for
列表推导式
[对(x)的操作 for x in 集合 if 条件]
[对(x,y)的操作 for x in 集合1 for y in 集合2 if 条件]

>>>a = []
>>> for i in range(10):
...     if i%2 == 0:
...             a.append(i)
...
>>> a
[0, 2, 4, 6, 8]
>>> b = [i for i in range(10) if i%2 ==0]
>>> b
[0, 2, 4, 6, 8]

字典推导式
>>> a = {}
>>> for i in range(10):
...     if i%2 == 0:
...             a[i] = i*i
...
>>> a
{0: 0, 2: 4, 4: 16, 6: 36, 8: 64}
>>> b = {i:i*i for i in range(10) if i%2 == 0}
>>> b
{0: 0, 2: 4, 4: 16, 6: 36, 8: 64}
5、python异常处理
try...except
raise 引发一个异常

raise ValueError('Invalid URL')
try ...finally
6、python格式字符串
1、%-formatting

2、str.format()
"hello {}.".format(world)

3、print(f'{last_block}')

>>> print("hello %s !" % ("world"))
hello world !
>>> print("hello{}!".format("world"))
helloworld!
>>> i= "world"
>>> print(f"hello{i}!")
helloworld!

https://www.cnblogs.com/c-x-a/p/9333826.html

7、python函数
7.1、python内建函数(即python自带的函数)

常见的内置函数

filter()      //可直接在python命令行中,使用`help(filter)`查看用法
map()
reduce()
zip()
staticmethod()
property() 函数的作用是在新式类中返回属性值。
ljust() 方法返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串。
pow(x,y)   x的y次方
pow(x,y,z)  x的y次方模z
type()
dis()
7.2、函数参数

函数传参时,如不按参数指定的顺序传参,需指定参数的关键字

>>> def fuct1(first,second,third):    //参数前加* 表示参数可选
...     print("first=%d" % first)
...     print("second=%d" % second)
...     print("third=%d" % third)
...
>>> fuct1(1,2,3)
first=1
second=2
third=3
>>> fuct1(1,third=2,second=3)
first=1
second=3
third=2

如果是函数定义中参数前的 *表示的是将调用时的多个参数放入元组中,**则表示将调用函数时的关键字参数放入一个字典中
如定义以下函数

def func(*args):
    print(args)

当用func(1,2,3)调用函数时,参数args就是元组(1,2,3)
定义以下函数

def func(**args):
    print(args)

当用func(a=1,b=2)调用函数时,参数args将会是字典{‘a’:1,’b’:2}

7.3、lambda函数

冒号前是函数参数,冒号右边是函数返回值

arr1  = [1,2,3,4]
arr2 = map(lambda x: 2*x, arr1)  //arr1是map函数的参数
>>> arr2
[2, 4, 6, 8]
8、python 读文件
with open("path+file.js" ,"r") as topo:
python path+file.py   
9、python闭包
def sum(a):
    def add(b):
        return a+b
    return add
# add 函数名称
# add() 函数的调用

num = sum(1)
>>>print(num(2))
 3
>>>type(num)
<class 'function'>

内部的函数用到外部函数的变量,并且外部函数返回内部函数名称。传递函数

10、python装饰器(修饰函数的作用)

‘@’ 用做函数的修饰符,可以在模块或者类的定义层内对函数进行修饰,
一个修饰符就是一个函数,它将被修饰的函数作为参数,并返回修饰后的同名函数或其他可调用的东西

装饰器的语法以@开头,接着是装饰器函数的名字和可选的参数。紧跟着装饰器声明的是被 修饰的函数和装饰函数的可选参数。

11、python浅拷贝和深拷贝
import copy
i = copy.copy(c)
j = copy.deepcopy(c)
  • 浅拷贝即是指创建一个新的对象,其内容是原对象中元素的引用。
  • 深拷贝”是指创建一个新的对象,然后递归的拷贝原对象所包含的子对象。深拷贝出来的 对象与原对象没有任何关联。
12、其他
12.1、is和==的区别

== 用来检查两个对象是否相等,而 is 用来检查两个对象是否相同(是同一个对象)

12.2、python中SimpleHTTPServer

快速搭建一个http服务,提供一个文件浏览的web服务。

python -m SimpleHTTPServer 80     //把当前目录发布到8000端口
python -m SimpleHTTPServer 80 &    //最后加一个 & ,则该命令产生的进程在后台运行
12.4、pep8规范

自动化pep8工具autopep8

pip install autopep8

pycharm使用autopep8

https://blog.csdn.net/qq_41996090/article/details/84196471

12.5、安装Python 3.6 在Ubuntu 16.04 LTS 版本

运行下面的命令来安装 Python 3.6:

# wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tar.xz
# tar xJf Python-3.6.0.tar.xz
# cd Python-3.6.0
# ./configure
# make && make install

https://blog.csdn.net/lzzyok/article/details/77413968