我爱编程

2018-04-12 开胃学习Python系列 - Python

2018-04-13  本文已影响0人  Kaiweio

本篇使用方法:
Control + F 可以找到所有我日常积累常用的python解释

Python是一种高级程式语言,这意味着它是针对人能够理解,而不是机器来进行优化的。它也是一种直译语言,这意味着它不直接编译为机器码,更重要的是,它通常以互动方式来使用。这可能会有很大差异,如果你习惯于像Java或C这类的程式,你写程式,编译它,运行并查看它的输出。在Python中,你可以启动互动式直译器,开始编写程式,直译器会进行评估你编写的每一行程式。在对于需要大量调查研究的程式工作来说,而不是需要大量设计的程式工作,这是非常有用的。Shell脚本就是其中的一个例子,数据清理是另一个。

Python是一种动态类型的语言,类似于JavaScript等语言。
这意味着当你声明一个变数时,你可以在上一行将其定义为整数,并在下一行将其指定为字符串。
Python的动态类型是特别有益的,当以互动方式使用时,因为它允许你快速的设置和修改变量内容,而无需担心变数的底层语法定义。

Jupyter

点击shift+enter来运行单元
程式的输出会立即印出来。如果你在非互动模式下使用Python,则不会印出任何结果。
但是,由于我们以互动模式使用它,我们立即获得该值。
真正发生的是浏览器将Python程式 发送到云端中的一台电脑机器, 该电脑机器执行Python 3直译器的代码,并将结果发送回来。

def add_numbers(x,y,z=None):
    if (z==None):
        return x+y
    else:
        return x+y+z

Python Types and Sequences

Python没有静态类型并不意味着Python中没有类型。 Python语言有一个内置的函数,称为type,它将显示类型。一些常见的类型包括字串(string),None类型,整数(interger)和浮点(floating-point)变数。

许多Python构建于不同的序列或集合类型。有三种原始的集合类型,元组(tuple),列表(list)和字典(dictionary)。

元组(tuple)是一个本身不可变的变数序列。这意味着元组(tuple)含有次序的项目, 而且一旦创建就不能更改。我们使用括号来表示元组(tuple),我们可以混合不同的类型 在元组里。这是一个有四个项目的元组(tuple)。两个是数字,两个是字串(string)。

x = (1, 'a', 2, 'b')
type(x)
>>> tuple

单引号或双引号都可用于表示字串(string)

列表(list)和tuple非常相似,但它们可以是可以改变的, 因此你可以更改其长度,元件的数量和更改元件。

x = [1, 'a', 2, 'b']
type(x)
>>>list
x.append(3.3)
for item in x:
    print(item)
i=0
while( i != len(x) ):
    print(x[i])
    i = i + 1

Python列表(list)和 元组(tuple)也可以允许有一些基本的数学运算。





最有趣的操作可以使用在列表称为切片(slicing)。其中用于存取元素的方括号阵列语法,
在Python中,索引操作允许你使用多个数值。第一个参数是起始位置, 如果这是唯一的元素,然后一个项目从列表中返回。第二个参数是切片的结尾。Python的一个方便之处在于,所有的字串(string)实际上 只是字的列表(list),所以对它们用切片是很容易的。

x = 'This is a string'
print(x[0]) #first character
print(x[0:1]) #first character, but we have explicitly set the end character
print(x[0:2]) #first two characters
x[-4:-2]          #读取从最后的第4个到最后第2个位置的所有的字
x[:3]             #从第一个字开始,直到位置3
x[3:]            #从第四个字开始,因为索引总是从 零开始,一直到列表的末尾。





字串只是字的列表。所以你可以在列表(list)中执行的操作,也可以在字串(string)上执行。

firstname = 'Kaiwei'
lastname = 'Zhang'

print(firstname + ' ' + lastname)
print(firstname*3)
print('Kaiwei' in firstname)
>>> True

字串(string)类型具有关联的函数称为拆分(split)。

此函数将字串分解成 子字串基于简单的模式 例如这里

firstname = 'Christopher Arthur Hansen Brooks'.split(' ')[0] 
lastname = 'Christopher Arthur Hansen Brooks'.split(' ')[-1] 
print(firstname)
print(lastname)

根据空格字符的存在来分割我的全名。结果是四个元件的列表。我们可选择索引运算的第一个元素作为名字, 最后一个元素姓氏。





字典(dictionaries)类似于列表和元组,它们包含一些集合 的项目

# Dictionaries associate keys with values.
x = {'Christopher Brooks': 'brooksch@umich.edu', /
'Bill Gates': 'billg@microsoft.com'}
x['Christopher Brooks'] 
# Retrieve a value by using the indexing operator
​>>> 'brooksch@umich.edu'

x['Kevyn Collins-Thompson'] = None
x['Kevyn Collins-Thompson']
>>> # 什么也不返回
for name in x:
    print(x[name])
for email in x.values():
    print(email)
for name, email in x.items():
    print(name)
    print(email)





拆解的例子:
可以有序列sequence-亦即有数据的list或tuple, 可以将这些项目分解成不同的变数, 用一个指定(assignment)语句。

x = ('Christopher', 'Brooks', 'brooksch@umich.edu')
fname, lname, email = x

这是另一个例子,有一个元组(tuple),有名字, 姓氏和电子邮件地址。
声明三个变量并将它们指派给元组(tuple)。
在内部,Python已经拆解了元组, 并按顺序分配了这些变量。
可以看到,如果向元组添加第四个项目, Python不知道如何拆解,所以我们有一个错误。

















































Python Map

Python map
含义
返回 object
参数 第一个参数是想要执行的函数,第二个参数和下面的每个参数,是可以反覆运算后的东西。
备注 map函数返回给你一个map物件(object)。实际上并没有尝试在两个项目上运行min函数, 直到你查看里面的值。
People = ['Dr. Christopher Brooks', 'Dr. Kevyn Collins-Thompson', 
'Dr. VG Vinod Vydiswaran', 'Dr. Daniel Romero']

def split_title_and_name(person):
    return person.split(' ')[0] + person.split(' ')[2]

list(map(split_title_and_name, people))





Python Range

Python range
含义
返回 x
参数 x
备注 python2.7中有xrange函数和range函数 python3中把range优化了,合并了xrange和range函数 用range函数就行





Python Reshape

n = np.arange(0, 30, 2)
n = n.reshape(3, 5) # reshape array to be 3x5
#output
array([[ 0,  2,  4,  6,  8],
       [10, 12, 14, 16, 18],
       [20, 22, 24, 26, 28]])





Python Shape

m = np.array([[7, 8, 9], [10, 11, 12]])
m.shape
>>> (2, 3)





Python Split

Python split
含义 用于分割
返回 返回string
参数 输入string
备注 .split(' ')[0] [0] selects the first element of the list
firstname = 'Christopher Arthur Hansen Brooks'.split(' ')[0] 
lastname = 'Christopher Arthur Hansen Brooks'.split(' ')[-1] 
print(firstname)
print(lastname)

Python Type

Python | type

type('This is a string')
>>>str
type(None)
>>>NoneType
type(add_numbers)
>>>function













































Numpy


Numpy Arange

numpy arange
含义 返回固定间隔的array
返回 array([])
参数 传递一个开始start,一个停止stop和一个跨步step的值, 并在给定的间隔内返回均匀跨步的值。
n = np.arange(0, 30, 2) # start at 0 count up by 2, stop before 30
>>>
array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28])





Numpy Diag

numpy diag
含义 diag构造一个对角阵列
返回 array
参数 array
y = np.array([4, 5, 6])
np.diag(y)
>>>
array([[4, 0, 0],
       [0, 5, 0],
       [0, 0, 6]])





Numpy Floor

numpy floor
含义 计算比每一个元素小或相等的最大的整数.
返回
参数 x
11/0.3
>>> 36.66666666666667
np.floor(11/0.3)
>>> 36.0







Numpy Linalg.Solve

numpy linalg.solve
含义 设解线性方程组形如 Ax=b,其中 A 是系数矩阵,b 是一维(n 维也可以),x 是未知变量. 再拿上面地最简单的二元一次方程组为例,用 numpy.linalg.solve 可以这样写成下面的。
返回 求解
参数 矩阵A,矩阵b
备注 scipy.optimize import fsolve 也可以解决方程组问题,还可以是非线性方程组
A = np.mat('1,2; 4,5')    # 构造系数矩阵 A                matrix([[1, 2],[4, 5]])
b = np.mat('3,6').T       # 构造转置矩阵 b 这里必须为列向量  matrix([[3],[6]])
                          # 不转置之前是                     matrix([[3, 6]])
r = np.linalg.solve(A,b)  # 调用 solve 函数求解              A.dot(r)验证

#多一个元
A = np.mat('3,-2,1; 1,1,1;3,-2,-1')    
b = np.mat('7,2,3').T      
r = np.linalg.solve(A,b) 

#多一个维度
A = np.mat('1,2; 4,5')          
b = np.array([[3,6], [7,8]]).T    #这里用了array注意一下
r = np.linalg.solve(A,b)   





Numpy Linspace

numpy linspace
含义 linspace函数类似于arange,除了告诉需要返回多少个数字,它会相应地分隔间隔。
返回 array
参数 起点,重点,均分个数
o = np.linspace(0, 4, 9) # return 9 evenly spaced values from 0 to 4
o
>>> array([ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ])





Numpy Meshgrid

numpy meshgrid
含义 meshgrid可以代替数组的双重遍历
返回
参数
import numpy as np  
x = [1,2,3,4]
y = [5,6,8,9]
xm, ym = np.meshgrid(x, y)


figure(figsize=[12, 4])
subplot(1, 2, 1)
plot(xm, ym, '.');
xlabel('x')
ylabel('y')
title('100 Grid Samples');

x = np.arange(0, 10)*.1
y = np.arange(0, 10)*.1
a, b = np.meshgrid(x, y)
subplot(1, 2, 2)
plot(a, b, '.');
xlabel('x')
ylabel('y')
title('100 Grid Samples');



Numpy Random.uniform()

numpy numpy.random.uniform(low,high,size)
含义 从一个均匀分布[low,high)中随机采样,注意定义域是左闭右开,即包含low,不包含high
返回 ndarray类型,其形状和参数size中描述一致
参数 (low,high,size)
low 采样下界,float类型,默认值为0;
high 采样上界,float类型,默认值为1;
size 输出样本数目,为int或元组(tuple)类型,例如,size=(m,n,k), 则输出mnk个样本,缺省时输出1个值。
xs = np.random.uniform(size=[2, 100])
# xs.shape = (2, 100)













































subplot

import numpy as np  
import matplotlib.pyplot as plt  
x = linspace(0,10); 
y1 = sin(x); 
y2 = sin(5*x);
a=subplot(321);
b=subplot(324);

# subplot(nrows, ncols, index, **kwargs)
# subplot(numRows, numCols, plotNum)
# subplot将整个绘图区域等分为numRows行* numCols列个子区域
# 然后按照从左到右,从上到下的顺序对每个子区域进行编号,左上的子区域的编号为1。
# 如果numRows,numCols和plotNum这三个数都小于10的话,可以把它们缩写为一个整数,
# 例如subplot(323)和subplot(3,2,3)是相同的。

subplot(a);
plot(y1);
subplot(b);
plot(y1);













































fraction模块提供有关有理数的算术表达和计算,实际上就是分数的表达和计算

import fractions

Python Fraction

Python Fraction
含义 分数
返回 fraction
参数 fraction float, string,Decimla
备注 limit_denominator(max=1000):可以截取想要得到的分母最大值;这个非常有用,也就是简化了分数的形式,一般可以化简成我们真实想要的分数。
#Construct a Fraction by numerator and denominator  
print (Fraction(3))      #3  
print (Fraction())       #0  
print (Fraction(10,8))   #5/4  
  
#construct by other fraction  
print (Fraction(5/4))    #5/4  
  
#construct by float  
print (Fraction(2.5))    #5/2  
print (Fraction(1.1))    #2476979795053773/2251799813685248  
  
#construct by decimal  
print (Fraction(Decimal('2.5')))  #5/2  
  
#construct by string  
print (Fraction('12/23'))         #12/23  

a = 5/46
Fraction(a).limit_denominator(1000)
#如果做这一步,结果不是 5/46
# 而是 Fraction(7832347178035645, 72057594037927936)

csv module

csv.DictReader()
































相关链接:

numpy linalg.solve
numpy meshgrid
numpy random.uniform

上一篇下一篇

猜你喜欢

热点阅读