python 自用笔记

1、输出语句
print("i love python")
#  表示注释

alt + N  上一句    alt+p 下一句

 print(1+3)   等价于   1+3
print("fire"+" "+"water") 字符串拼接
print("well love"*8) 输出循环8次;


2、第二集
ctr+n 新建一个窗口
table 是提示键
f5 开始运行新窗口程序
temp = input("不妨猜一下心中所想的数字:")   输入数字
print("hellow");print("world")    换行输出
print("输入的字符为" +str(i))   i为数字是为了拼接  需要先转换为str类型
help(xxx)   xxx是bif 内置函数    输出为函数的使用方法

2、Python列表(数组)List
python没有数组 而是一个一个列表  
有三种列表(1):普通列表(类似于数组,放入的是同一类型);(2)混合列表(各种类型混合在一起)(3)空列表;
##想列表添加元素 append只能添加一个元素
##extend可以添加多个参数   原理是一个列表扩张另一个列表
##len(xxx)  xxx为列表的名字   该方法显示列表长度


3、tuple   元组
tuple是不能修改的   比list更安全

4、global  全局变量声明
global---将变量定义为全局变量。可以通过定义为全局变量,实现在函数内部改变变量值。

5、异常处理分类
类型错误
 except Exception as e:
        print(str(e))
        return False

超出范围错误
 except IndexError:
        print("Did you attempt to play a row or column outside the range of 0,1 or 2? (IndexError)")
        return False

6、迭代器
有两个循环增加的变量则用
for count, row in enumerate(current_game) :
一个的话用
for row in  current_game :

7、 count方法
Python count() 方法用于统计字符串里某个字符出现的*次数*。可选参数为在字符串搜索的开始与结束位置。

8、转化为字符串格式
print(f"Player {count+1} is the winner!")
f代表字符串格式   {}内的变量是被转化的为string类型的变量


9、 reversed 反向迭代   
使用reversed() 内置方法需要转化为list类型
cols = list(reversed(range(len(game)))) 

10 、 zip()打包方法
当zip()函数有两个参数时
zip(a,b)zip()函数分别从a和b依次各取出一个元素组成元组,再将依次组成的元组组合成一个新的迭代器--新的zip类型数据。
注意:
要求a与b的维数相同,当两者具有相同的行数与列数时,正常组合对应位置元素即可;
当a与b的行数或列数不同时,取两者结构中最小的行数和列数,依照最小的行数和列数将对应位置的元素进行组合;这时相当于调用itertools.zip_longest(*iterables)函数。


11、匿名函数 (可以省下定义过程),当函数只使用次数很少是就可以使用匿名函数 lambda
g=lambda x:2*x+1
j=g(5)
print(j)

12、filter过滤器   filter(function名,参数名)          
    map把多种值的参数放进def中 返回所有值   map(function名,参数名)
##把任何非true的过滤掉
def jishu(x):
    return  x%2
show=list(filter(jishu,[0,2,3,4,5,6]))
返回的show值是通过拦截的参数x
-------------------------------------
show1 = list(map(jishu,[0,2,3,4,5,6]))
返回的show值是通过方法后的结果


13、递归
def factorial(n):
    #终止条件
    if n==1:
        return 1
    #循环体  以及循环式子
    else:
        return n*factorial(n-1)

hanio  问题  自己研究  背下来


14、字典(key:value)映射
创建
dicr1 = {"李宁":"一切皆有可能","耐克":"Just do it","阿迪达斯":"imposible is nothing"}
1.直接创建,冒号隔开 
mydict = {‘key’:’value’…}

2.=连接键值对 
mydict = dict(key1=value1,key2=value2…)//键key  不能用引号
 

3. 创建一个空的,慢慢赋值 
mydict={} 
mydict[key1]=value1 
mydict[key2]=value2 


4.利用zip压缩两个序列里面的值,组成键值对 
keys = [a,b,c,d] 
values = [e,f,g,h] 
mydict = dict(zip(keys,values))

5.可全部初始化为一个值,然后需要的时候修改 
list = [a,b,c,d] 
mydict = dict.fromkeys(list,‘?’) //?可以是任何你想要的值!

注意******
dict1 = {}
dict1.fromkeys((1,2,3),"你好")
formkeys 并没有实际上改变dict1的值并且  1,2,3的值都为"你好"


15、地址问题
a={1:"tanjing",2:"niuman"}
b = a.copy()//浅拷贝   地址不是a的地址   a改变b不会改变
c = a //赋值        地址是a的地址 a改变c也会改变

16、集合
集合里的元素是唯一的  ,重复的元素会被踢出
if x not in num:   ------这个可以判断num中有无x
set得到的集合是无序的
#不可变集合    把集合变为固定不可变的
num3 = frozenset(num2)

17、生成器
生成器不会把结果保存在一个系列中,而是保存生成状态,每次迭代的时候返回一个值,
而列表生成式是把值生成好了然后放到内存中
>>> gen = (x**2 for x in range(5))  
>>> gen //生成器
<generator object <genexpr> at 0x0000000002FB7B40>
>>> for g in gen:
...   print(g, end='-')
...
//生成器,初始化产生的是对象(生成器),值是临时动态产生
xyz = (i for i in range(10))
print(list(xyz)[:5])
//列表,初始化产生了值 存在列表中 用[]

xyz = [i for i in range(10)]
print(list(xyz)[:5])
0-1-4-9-16-


18、print("比枚举更方便的做法")
[print(i) for i in range(5)]
0
1
22
3
4
[[print(i,ii) for ii in range(3)] for i in range(5)]
在你的第一次尝试中,这些都是比较难写出来的。您可以通过定期写出for循环来构建这些循环:

for i in range(5):
    for ii in range(3):
        print(i,ii)

19,使用timeit
单个简单的使用print(timeit.timeit('1+3',number=5000))  // 一对单引号
print(timeit.timeit('''input_list = range(100)        //复杂的使用三个单引号

def div_by_two(num):
    if (num/2).is_integer():
        return True
    else:
        return False

# generator:
xyz = list(i for i in input_list if div_by_two(i))
''', number=50000))   


20   __name__ == '__main__'  模块内的用法
c
#确保只运行当前页面,而不是导入页面
if __name__ == '__main__':
    main()

21 、  yield --- 和 return的区别    yield  自动if 和 break功能
print("进阶版,不用全部循环, 当我们循环到想要的值自动break,终止循环")
def combo_gen():
    for c1 in range(10):
        for c2 in range(10):
            for c3 in range(10):
                yield (c1,c2,c3)

for (c1,c2,c3) in combo_gen():
    print(c1,c2,c3)
    if (c1,c2,c3) ==CORRECT_COMBO:
        print('Found the combo:{}'.format((c1, c2, c3)))
        break

22、Python 学习笔记 多进程 multiprocessin
Python 解释器因为有一个全局解释器(pil),所以只能为单线程,不能发挥多核系统优势。
但是 多进程程序不受影响

控制子进程进入不同阶段的是 start(), join(), is_alive(), terminate(), exitcode 方法。这些方法只能在创建子进程的进程中执行。
import multiprocessing

def spawn():
    print('Spawned')

if __name__ == '__main__':
    for i in range(100):
        p = multiprocessing.Process(target=spawn)
        p.start()
        p.join()

p.join 限制了CPU的使用量,他等待一个进程结束后才让下个进程开始

###############33
def spawn1(num):
    print('spawn # {}'.format(num))

if __name__ == '__main__':
    for i in range(5):
        p = multiprocessing.Process(target=spawn1, args=(i,))**********
        p.start()

如果只有一个参数 则 arg=(i,)后面这个逗号要带着,结果是
spawn # 1 2
spawn # 2 3
spawn # 0 1
spawn # 3 4
spawn # 4 5
说明这些进程没有按顺序,如果我们要按顺序则需要加一句 p.join() 他的作用是一个进程结束之后在进行下一个

为了把我们的多线程数据传递到主函数,我们就要用 from multiprocessing import Pool
1、运用pool方法设置多线程
2、用pool.map()方法接收数据,在map()中需要放入函数和需要迭代运算的值。
3、关闭Pool进程池   Pool.close()
if __name__ == '__main__':
    if __name__ == '__main__':
        p = Pool(processes=4)#我们要做的是首先设置Pool对象,它将有20个进程,我们将允许这些进程进行一些工作。
        data = p.map(job, [i for i in range(20)])
        p.close()
        print(data)

%%parse_us = [FunctionA() for _ in range(5)]    这个写法是吧FunctionA()方法执行5次  固定写法

beautifulsoup学习网站

23、beautifulsoup
1、resp = requests.get(url)   //获得 Response 对象resp。可以从这个对象中获取所有我们想要的信息。
requests对象的get和post方法都会返回一个Response对象,
这个对象里面存的是服务器返回的所有信息,包括响应头,
响应状态码等。
其中返回的网页部分会存在.content和.text两个对象中。
两者区别在于,content中间存的是字节码,不会有换行什么的
而text中存的是Beautifulsoup根据猜测的编码方式将content内容编码成字符串,显示出来的形式就像一般网页那样。
2、soup = bs.BeautifulSoup(resp.text, 'html.parser')    //把resp.rext部分转化为beautifulSoup
'html.parser'是4个解析方法中的一种   python标准库
3、body = soup.body    把body内容显示出来
4、links = [link.get('href') for link in body.find_all('a')]    找到a标签  并把href里面内容取出来
#//<a href="http://www.fashionone.com/showcase"><img src="/images/fashione1.jpg"/></a>
5、links = [str(link.encode("ascii")) for link in links]    #把内容转化为sccii格式的字符  


24、random模块详解


random.random()    --> 生成一个0到1的随机符点数: 0 <= n < 1.0

random.uniform(a,b)    --> 生成一个a到b的随机符点数: a <= n < b

random.randint(a,b)    --> 生成一个a到b的随机整数: a <= n <= b

random.randrange(a,b)   --> 生成一个a到b的随机整数: a <= n < b

random.randrange(1,10,2)   --> 生成一个a到b的随机整数: 2未步数,1、3、5、7、9

random.choice()  --> 从序列中获取一个随机元素   可以为字符串、列表、元祖

random.shuffle()  -->洗牌 (打乱原顺序,类似扑克牌中的洗牌)

random.sample(list,3)  -->从list中取3个数

25、pandas模块学习
t = pd.Series([1,2,3,4,5])      #创建Series类型的一维数组
print(t) 
输出为:    
0    1
1    2
2    3
3    4
4    5
0-4  是索引index    t的类型是Series
t2= pd.Series([5,6,3,2,9],index=list("abcde"))     #自己创一个索引自设的Series

26、Numpy之random简单的随机数据生成
主要常用的函数有np.random.rand()、.randint()、.randn()、.random()。下面主要介绍各自的区别和功能

Guess you like

Origin blog.csdn.net/qq_36737214/article/details/96007639