在ipython状态下使用命令行可以使用,!+“shell命令”
a=lambdax,y:x+y
a(3,11)
print ("x:\n", x)
print ("x.T:\n", x.T)
2.
import pandas as pd
df = pd.read_csv("titanic.csv", header=0)
df.head()
df.describe()
df["age"].hist()
#! /bin/python3
# -*-encoding="utf-8"-*-
# __Author__ ="ErrolYan"
# __Time__="2018.12.23"
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
args = parser.parse_args()
print(args.accumulate(args.integers))
扩展的迭代解压语法是专门为解压不确定个数或任意个数元素的可迭代对象而设计的
列表排序:list.sort()
列表中有字典:list.sort(key=lambda,x:x[“name”] 仍然保存在列表中
q = deque()
q.appendleft(4) #左侧添加4元素
q.pop(3) #右侧删除元素3
q.popleft(4) #左侧删除元素4
def test(a,b,func):
return = func(a,b)
return result
test(11,22 lambda x,y:x+Y)
方法1:
a = a+b
b = a-b #已经交换a的值给b
a = a-b # 交换b的值给a
方法2:
a,b = b,a
num +=a 如果num是可变的数据类型则直接的修改num,如果不是则新建一个变量指向那个数据。
默认的打开方式是读取
open(“路径名字”,“r”)#文件必须存在
w,可以不存在,不存在就追加
a 追加文本
rb 以二进制文件格式打开(二进制文件是可以直接从硬盘读取直接应用,不用转换)图片 pdf 音频和视频都需要二进制文件读取
f.read()#一次性读取文件的所有内容 f.read(20) #一次读取20个字
f.readlines() #一次读取多行文件,将文件放在列表中
f.write(“内容”)
position = filename.rfind(".") #数字位置
原文件名 = filename[0:postion]
原文件的后缀 = filename[postion+1:]
* os.rename("old_name","new_name") #重新命名
* os.mkdir("dir_name") #创建文件夹
* os.rmdir("dir_name") #删除文件夹
* os.getcwd() #获取当前工作的路径
* os.chdir("../") #改变路径
* os.listdir("路径") #
## 批量重新命名
* os.listdir("路径") #
* os.rename("old_name","new_name") #重新命名
## 面向对象
* 类中的self是一个指针,指向对象。
* def __init__(self): #传递变量
* def __str__(self): # 解释
* * return
* 私有方法:def __test1(self):一般是定义在类方法的内部,内部调用。
* def __del__(self):
* print("删除前的挣扎”)#系统的对象没有人调用(引用基数)的时候自动删除
* 查看引用次数:import sys
* sys.getrefcount()
## 装饰器
装饰器的输入参数是函数名字。其实就是对函数进行包装。
1.1xml文件的书写
#coding=utf-8
#定义函数:完成包裹数据
def makeBold(fn):
def wrapped():
print("----1—")
return “\n” + fn() + “\n”
return wrapped
#定义函数:完成包裹数据
def makeItalic(fn):
def wrapped():
print("----2—")
return “\n” + fn() + “\n”
return wrapped
@makeBold
@makeItalic
def test3():
print("----3—")
return “hello world-3\n”
ret = test3()
print(ret)
1.2.执行结果
----1—
----2—
----3—
hello world-3
2.装饰器在定义完之后就直接装饰了。@名字 等价 func = 函数(func)
#coding=utf-8
def w1(func):
print("—正在装饰1----")
def inner():
print("—正在验证权限1----")
func()
return inner
def w2(func):
print("—正在装饰2----")
def inner():
print("—正在验证权限2----")
func()
return inner
#只要python解释器执行到了这个代码,那么就会自动的进行装饰,而不是等到调用的时候才装饰的
@w1
@w2
def f1():
print("—f1—")
#在调用f1之前,已经进行装饰了
f1()
2.2 执行结果:装饰是从里往外装饰,执行是从外向里执行。
—正在装饰2----
—正在装饰1----
—正在验证权限1----
—正在验证权限2----
—f1—
3.对含有参数的函数进行装饰的时候,需要对装饰函数传入参数。
![f898264566a9eb14f8d1ecd16fc2f486.png](evernotecid://1CCF25FA-AE21-4023-9DE3-19E31D49106E/appyinxiangcom/11012738/ENResource/p1401)
4.对不定长参数的函数进行装饰
def func(functionName):
print("—func—1---")
def func_in(*args, kwargs):#采用不定长参数的方式满足所有函数需要参数以及不需要参数的情况
print("—func_in—1---")
functionName(args, **kwargs)#这个地方,需要写以及,如果不写的话,那么args是元祖,而kwargs是字典
print("—func_in—2---")
print("---func---2---")
return func_in
@func
def test(a, b, c):
print("----test-a=%d,b=%d,c=%d—"%(a,b,c))
@func
def test2(a, b, c, d):
print("----test-a=%d,b=%d,c=%d,d=%d—"%(a,b,c,d))
test(11,22,33)
test2(44,55,66,77)
5.带有参数的装饰器,对函数进行装饰
def func_arg(arg):
def func(functionName):
def func_in():
print("—记录日志-arg=%s–"%arg)
if arg==“heihei”:
functionName()
functionName()
else:
functionName()
return func_in
return func
#1. 先执行func_arg(“heihei”)函数,这个函数return 的结果是func这个函数的引用
#2. @func
#3. 使用@func对test进行装饰
@func_arg(“heihei”)
def test():
print("–test–")
#带有参数的装饰器,能够起到在运行时,有不同的功能
@func_arg(“haha”)
def test2():
print("–test2–")
test()
test2()
## 作用域
* 什么是命名空间
* * 命名空间就是生效的范围,from test import *#把所有的函数都导入到当前的命名空间中
* * globals() #查看当前的全局变量
* * locals() #查看当前的局部变量
* 作用域:局部变量<闭包<全局变量
* LEGB:![82d9aabf2b2de7075a81c90f2a9e9d2d.png](evernotecid://1CCF25FA-AE21-4023-9DE3-19E31D49106E/appyinxiangcom/11012738/ENResource/p1402)
## Python是动态语言
* 静态语言:就是执行前必须先编译,再执行
* 动态语言:在运行的过程中可以修改代码
* * 实例添加属性:laowang.addr="山东"
* * 添加类属性:Person.name=100
* * 添加方法:![6a7fa61a78ea691b1b628f0fcfe9c9ec.png](evernotecid://1CCF25FA-AE21-4023-9DE3-19E31D49106E/appyinxiangcom/11012738/ENResource/p1403)
## 类的对象的属性
* ![4cb49b2bbe3689562db1764f8c2d1dce.png](evernotecid://1CCF25FA-AE21-4023-9DE3-19E31D49106E/appyinxiangcom/11012738/ENResource/p1404)
## 生成器
* 什么是生成器?
* * 生成你想要的列表和值,仅仅是得到需要计算值的公式。
* 第一种生成器:b =(x*2 for x in range(10)) bb=next(b)
* 第二种方式:![cf372ac26303854c9bc9e6a5e085d549.png](evernotecid://1CCF25FA-AE21-4023-9DE3-19E31D49106E/appyinxiangcom/11012738/ENResource/p1405)
* 含有yield 的函数,调用的时候需要有一个变量存取对象。
* next(a)
* a.__next__()
* ![192ee9a8bb9d8712f8400f714e2e85ee.png](evernotecid://1CCF25FA-AE21-4023-9DE3-19E31D49106E/appyinxiangcom/11012738/ENResource/p1406)
* t.sent("haha") 等价于a.next()
## 可迭代
* ![baa65f4fec8de4b1c79c7fbbe8e1dce8.png](evernotecid://1CCF25FA-AE21-4023-9DE3-19E31D49106E/appyinxiangcom/11012738/ENResource/p1407)
from colleactions import Iterable
isinstance(“abc”,Iterable)
## 迭代器(生成器一定是迭代器)
from colleactions import Iterator
isinstance(“abc”,Iterator)
## 日志调试
## 多任务
* 单核CPU
* * 2us循环执行各个程序:时间片轮转
* * 优先级调度:
* 多核CPU
* * 并发:任务数大于核数,就是并发,看上去是一起执行
* * 并行:多任务同时进行
## 多进程
* 进程和程序:程序是未运行的,进程是有生命的
import os
import time
ret = os.fork()#创建新的子进程。
if ret==0:
while True:
print(“1”)
time.sleep(1)
else:
while True:
print(“2”)
time.sleep(1)
## 获取 pid
* os.getpid() #子进程
* os.getppid() # 获取父进程
![2b93f08c00bf3db519bc4babcdd7ae84.png](evernotecid://1CCF25FA-AE21-4023-9DE3-19E31D49106E/appyinxiangcom/11012738/ENResource/p1410)
* 进程与进程之间是相互独立的,并且全局变量是独立的.
## 进程之间的通讯
* QQ1与 QQ2 通讯就是进程之间的通讯
* 遇到多进程就画线来理清楚
写个代码炸弹:
import os
os.fork()
os.fork()
while True:
os.fork()
print(“你完成不了!!,必须死机”)
print(“等待测试结果”)
## 跨平台的进程
![475af38a9750ef80f263f3a040b5b94e.png](evernotecid://1CCF25FA-AE21-4023-9DE3-19E31D49106E/appyinxiangcom/11012738/ENResource/p1411)
#!/usr/bin python
#author=“ErrolYan”
from multiprocessing import Process
import time
def test():
while True:
print(“test”)
time.sleep(1)
p = Process(target=test)
p.start()
p.join()#等待p 子进程结束的时候才运行主程序.
while True:
print(“main”)
time.sleep(1.5)
** 主进程是在子进程都运行完,主进程才可以运行完.
## time 模块
* from time
* time.ctime() #显示系统的时间
* time.time() #显示格林时间,距离现在的时间秒数
* time.time()可以用于统计程序运行的时间.
## 进程池
![f5d03b08fdee06ac04502d623fdf0ff3.png](evernotecid://1CCF25FA-AE21-4023-9DE3-19E31D49106E/appyinxiangcom/11012738/ENResource/p1412)
#主进程一般都是用来等待,真正的任务就是子进程来完成的.
阻塞式添加任务:就是一个执行完了添加另外一个任务.
## 进程之间的通信:Queue
1.队列:先进先出
2.栈:先进后出
3.队列可以添加任何的东西,对象/类/字符/字典/列表
q= Queue() #无限制的放进去
pw = Process(target=write,args(q,))
pr = Process(target=read,args(q,))
#启动子进程
pw.start()
pw.join()
1.进程之间是相互独立的,Queue
2.进程池:q = Manager().Queue(),其余和进程间的通信是完全一样的
3.
# 正则表达式
正则表达式:Match Tracer;RegexMagic 测试工具
## python 版本 re
. 默认是匹配出换行符意外的任何字符.
^ 匹配字符的开头
$ 匹配字符串的结尾或字符串末尾的换行符之前.foo 匹配'foo'和'foobar',而正则表达式foo$只匹配'foo'。
*使得到的RE匹配前面RE的0或更多次重复,尽可能多的重复。
+使得到的RE匹配前一个RE的1次或更多次重复。 ab+将匹配'a',后跟任何非零数字的'b'; 它不会只匹配'a'。
ab?将匹配'a'或'ab'。
## 多进程
import os
import time
ret = os.fork()
if ret ==0:
while True:
print("----1----")
time.sleep(1)
else:
while True:
print("—2---")
time.sleep(1)
import
ret = os.fork()
print(“haha”)
if ret >0:
print("—父进程----”)
else:
print(“----子进程----”)