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 multiprocessingdef 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次  固定写法

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()。下面主要介绍各自的区别和功能