Python 学习笔记(不定期更新~)

Python基础知识

python的优势

Python中的for循环要高于C语言中的for循环,因为Python中的for循环不仅可以用在list或tuple上
还可以用在其他的可迭代对象上.
python 实现下标循环,利用Python内置的enumerate函数可以把一个list变成索引-元素对.这样就可以在for循环中同时迭代索引和元素本身.
such as : for i,n in enumerate([‘a’,’b’,’c’])
三层以上的循环就很少用了

高级特性/列表生成器:

  generator 一个生成器,区分和list的区别
  generator 是一个可以迭代的对象  g=(x*x for x in range(10)) for n in g: print(n)
   list 的元素可以直接打印,Generator 的元素 可以用for循环来进行实现
  可迭代对象 Iterable ,这是可以直接作用于for 循环的对象。
  迭代器   Iterator ,这是不断返回下一个值的对象称为迭代器  可以被next()函数调用

在linux的python开发中,利用ctrl+z 是将程序挂起, jobs 显示所有命令 

          fg   还原挂起的进程
          bg   后台运行

高阶函数:

  绝对值函数 abs() ,分清楚函数调用和函数本身的区别 abs就是函数本身
  如果将系统内部的函数名定义为变量,例如abs=10,那么想恢复 abs函数需要重新启动python交互环境
  高阶函数:一个函数可以接受另一个函数作为对象,这种函数就叫高阶函数
  内建函数:
   map() and reduce() 非常重要的函数
   map():map(函数,Iterable)
   “”“list 对象不能调用  list object is not callable”“”
   reduce() 函数,是将结果继续和序列的下一个元素做累积计算。
   filter() 函数,用于过滤序列
   sorted([],key=,reverse=Ture) 排序函数
  
   #返回函数 匿名函数
   多线程,多进程之间的区别
   如何时间多进程和多线程
  

append() VS extend() 

list.append() 是向列表中添加一个对象 object,也就是整体打包加入
list.extend() 是把一个序列的内容添加到列表

在控制台重新加载文件时需要调库

from importlib import reload
python console

加载reload() 函数,可以重新调用

syntax errors and exceptions

Exceptions:(异常)
即使在程序语法完全正确的情况下,执行的时候也有可能发生错误,在程序运行时检测出的错误称之为异常!!!
handling exceptions 控制异常
可以编写程序来控制已知的异常, 
      while True:
try:
x=a+b
break
except ValueError:
print(“it’s a value error”)

在Python算法中,实现数组的旋转,可以利用下标的加数进行取余来进行数组元素交换
具体看 rotate.py文件
  Python cookbook
对齐文本字符串
基本的有ljust(),rjust(),and center()
还有利用format()函数,format(text,’>20’),format(text,’*^20s’) #对齐字符">.^"
老代码中还可以看见利用% 的操作符,format()函数要好用很多.

如果以后的研究用到矩阵后者向量,Numpy 是一个很好的起点 http://www.numpy.org

random.choice(values) # 随机选择一个
random.sample(values,n) #随机选择n个元素
random.shuffle(values) # 原地打乱顺序,也叫重新洗牌

if _name__==’_main_

简单的理解:如果模块是被直接运行(run)的,则代码块被运行
      如果模块是被导入(import)的,则代码块不被运行  
python -m 参数用于将一个模块或者包作为一个脚本运行 ,还是没有搞透

readline().split(‘\t’)
readlines().split(‘\t’) 的区别:
readline() 每次读出一行内容,读取所占的内存资源小,适合大文件的读取,返回一个字符串对象(str)
readlines() 读取整个文件所有行,保存在一个list 当中,每行作为一个元素,读取大文件可能会比较占内存

理解Python的命名空间和内存地址分配
/home/dengshuo/下载/火狐截图_2018-03-22T12-09-54.240Z.png

python 的元编程:
元编程的主要目标是创建函数和类
给函数添加一个包装

python enumerate() 函数

这算是一个循环技巧(loop techniques)
在字典循环中,关键字和对应的值可以使用iteritems()方法同时解读出来

for i,v in dict.iteritems():
    print i,v

对于序列循环中,索引位置和对应值可以使用enumerate()函数同时得到 (index,value)

for i ,v in enumerate({['a','b','c']):
     print i,v

输出:

i v
0 a
1 b
2 c

leetcode 中的问题,完美利用enumerate 解决

strStr 处理文本字符串的问题

python的 __init__ ()的使用方法及定义

这个方法一般用于初始化一个类
1.首先说一下,带有两个下划线开头的函数是声明该属性为私有,不能在类地外部被使用或直接访问。
2.init函数(方法)支持带参数的类的初始化 ,也可为声明该类的属性
3.init函数(方法)的第一个参数必须是 self(self为习惯用法,也可以用别的名字),后续参数则可 以自由指定,和定义函数没有任何区别。

Python 网络爬虫(crawl)

对于爬取网络的界面分析,可以使用 builtwith 来进行爬取网页的的框架几语言分析 import builtwith
对于一些需要联系网页的所有者,可使用 WHOIS协议  import whois 找到所有者及其邮箱
URL,(uniform resource locator)统一资源定位符
URI (universal resource identifier) 通用资源标志符
  
 爬取需要登陆的网站,如果不是从浏览器 发出请求,则得不到响应。我们需要将爬虫程序伪装成正规军
 实现办法:自定义网页请求报头
requests库  比较重要的一个网页处理库
      requests.request() 这是一个基础支撑,构造一个网页向服务器的请求
      requests.get()       获取HTML网主要办法
      requests.head()      获取网页头文件
      requests.post()      提交post请求,对应Http的post
      requests.put() 提交一个put的请求
      requests.patch() 提交局部修改请求
      requests.delete() 向网页提交删除请求
      
 html知识:父节点、子节点、孙节点  

位置参数&关键字参数

位置参数:调用函数时根据函数定义的参数位置来传递参数
     注意,就是两个参数的顺序必须一一对应,且少一个参数都不可以

关键字参数:用于函数调用,通过 键-值 (也就是字典变量) 形式加以确定
     可以让函数更加清晰,容易使用,同时也清除了参数的顺序需求

位置参数必须在关键字参数的前面.但关键字参数之间不存在顺序.

# 位置参数
def print_hello(name,sex):
# 在进行调用时,参数顺序要求一致
print_hello('dengshuo', male)

# 关键字参数
# 在调用时
print_hello(name='dengshuo',sex='male')
# 可以接受任意数量的位置参数的函数
def avg(first,*rest):  
# 利用*可以表示任意数量的位置参数

# 接受任意数量的关键字参数
def avg(*args,**kwargs):

所有的位置参数都会在元组args中,
所有的关键字参数都会放置在字典kwargs中

tile() 函数

tile(A,reps):
# construct an array by repeating A the number of times given 
# by reps 

returns : ndarray ,the tiled output array

Examples:

a = np.array([0, 1, 2])
np.tile(a, 2)
array([0, 1, 2, 0, 1, 2])
np.tile(a, (2, 2))
array([[0, 1, 2, 0, 1, 2],
[0, 1, 2, 0, 1, 2]])
np.tile(a, (2, 1, 2))
array([[[0, 1, 2, 0, 1, 2]],
[[0, 1, 2, 0, 1, 2]]])

b = np.array([[1, 2], [3, 4]])
np.tile(b, 2)
array([[1, 2, 1, 2],
[3, 4, 3, 4]])
np.tile(b, (2, 1))
array([[1, 2],
[3, 4],
[1, 2],
[3, 4]])

c = np.array([1,2,3,4])
np.tile(c,(4,1))
array([[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4]])

多维数组的求和 numpy.sum()函数

import numpy as np
a = np.array([[0, 2, 1]]) # 二维数组
print a.sum()
print a.sum(axis=0)
print a.sum(axis=1)

结果分别是:3, [0 1 2], [3]
b = np.array([0, 2, 1])
print b.sum()
print b.sum(axis=0)
print b.sum(axis=1)

结果分别是:3, 3, 运行错误:'axis' entry is out of bounds
可知:对一维数组,只有第0轴,没有第1轴
c = np.array([[0, 2, 1], [3, 5, 6], [0, 1, 1]])
print c.sum()
print c.sum(axis=0)
print c.sum(axis=1)

结果分别是:19, [3 8 8], [ 3 14  2]
readline() &readlines()的区别

readline() 每次读取一行,返回这一行的元素,结合for语句进行使用.
readlines() 读取所有的行,并将这些行全部保存在一个list 中 return a list,但是这个方法不适合读取较大的文件,太占内存.

猜你喜欢

转载自blog.csdn.net/qq_37904945/article/details/80199784