目录
Indentation, not braces - 缩进,而不是括号
Dynamic references, strong types
我使用的是Anaconda navigator.具体介绍可以看
https://www.zhihu.com/question/353409585
Python is an interpreted language.
The Python interpreter runs a program by executing one statement at a time.
终端操作
The >>> you see is the prompt where you’ll type expressions. To exit the Python interpreter and return to the command prompt, you can either type exit() or press Ctrl-D. Running Python programs is as simple as calling python with a .py file as its first argument. Suppose we had created hello_world.py with these contents:
假设我们有一个hello_world的.py文件。用exit()退出pyhton。
使用$ python hello_world.py
即可运行hello_world.py这个文件.
While many Python programmers execute all of their Python code in this way, many scientific Python programmers make use of IPython, an enhanced interactive Python interpreter.
By using the %run command, IPython executes the code in the specified file in the same process, enabling you to explore the results interactively when it’s done.
也可以通过%run来运行文件
语法
Indentation, not braces - 缩进,而不是括号
用一个for loop来距离
for x in array:
if x < pivot:
less.append(x)
else:
greater.append(x)
冒号表示缩进代码块的开始,之后所有代码必须缩进相同的数量,直到该代码块的结束。
Python语言的一个重要特征是其对象模型的一致性。每个数字、字符串、数据结构、函数、类、模块等等都存在于Python解释器自己的框中,被称为Python对象。每个对象都有一个关联的类型(例如,字符串或函数)和内部数据。在实践中,这使得该语言非常灵活,因为即使是函数也可以像对待任何其他对象一样对待。
注释
Python解释器会忽略前面带有#的任何文本。这通常用于向代码添加注释。有时,您可能还希望排除某些代码块而不删除它们。一个简单的解决方案是注释掉代码:
results = []
for line in file_handle:
# keep the empty lines for now
# if len(line) == 0:
# continue
results.append(line.replace('foo', 'bar'))
算数运算符
标准数据类型
Type Description
None The Python “null” value (only one instance of the None object exists)
str String type. ASCII-valued only in Python 2.x and Unicode in Python 3
float Double-precision (64-bit) floating point number. Note there is no
separate double type.
bool A True or False value
int Signed integer with maximum value determined by the platform.
Python3.所有内置数据类型
https://en.wikipedia.org/wiki/Python_(programming_language)
数字类型
Python中数字的主要类型是int和float。可以存储为int的整数的大小取决于你的平台(无论是32位还是64位),但Python会透明地将一个非常大的整数转换为长整数,它可以存储任意大的整数。
ival = 17239871
ival ** 6
**表示ival的6次方
3 / 2
在python3中,两个整形相除得到的是一个浮点数。
要想得到一个c类型的结果。就用两个//
3 // 2.0
Dynamic references, strong types
Python is a dynamically-typed language. In contrast with many compiled languages, such as Java and C++, object references in Python have no type associated with them.
An assignment statement in Python creates new variables and gives them values.
There is no problem with the following:
Isinstance
如果你想检查一个对象的类型是否在元组中,Isinstance可以接受一个类型的元组
函数
函数使用def关键字声明,并使用return关键字返回
def my_function(x, y, z=1.5):
if z > 1:
return z * (x + y)
else:
return z / (x + y)
使用多个return语句没有问题。如果到达函数的末尾而没有遇到return语句,则返回None。
每个函数可以有一些位置参数和一些关键字参数。关键字参数最常用来指定默认值或可选参数。在上面的函数中,x和y是位置参数,而z是关键字参数。这意味着它可以用以下两种等价的方式来调用:
my_function(5, 6, z=0.7)
my_function(3.14, 7, 3.5)
my_function(3.14, 7)
对函数参数的主要限制是关键字参数必须跟在位置参数之后(如果有的话)。
函数和通过引用传递的Python风格:通过对象引用传递
当在Python中给一个变量(或名称)赋值时,你是在等号的右边创建对该对象的引用。
在某些语言中,这个赋值会导致数据[1,2,3]被复制。在Python中,a和b实际上现在指向同一个对象,即原始的列表[1,2,3]
但是假如给b赋不同类型的值,a是不会被改变的。
这这种情况下,为b创建了一个新的内存空间。
函数参数传递
在Python中处理较大的数据集时,理解Python中引用的语义以及何时、如何和为什么复制数据尤其重要。
当你将对象作为参数传递给函数时,你传递的是对象引用;没有发生复制。
这意味着函数可以改变其参数的内部结构,即参数所指向的对象。
然而,试图改变函数中的实际引用对象将导致一个新的内存位置被创建,而被调用对象保持不变:
名称空间、作用域和局部函数
函数可以访问两种不同作用域的变量:全局作用域和局部作用域。
在Python中,描述变量作用域的另一个更具描述性的名称是名称空间。
默认情况下,函数中赋值的任何变量都被赋给本地命名空间。本地命名空间是在调用函数时创建的,并立即由函数的参数填充。
函数完成后,本地命名空间将被销毁
def func():
a = []
for i in [1,2,3,4,5]:
a.append(i)
在调用func()时,创建空列表a,添加5个元素,然后在函数退出时销毁a。
当我们在函数外声a之后:
现在假设我们试图改变函数内部a的对象引用:
可以对函数内的全局变量赋值,但这些变量必须使用global关键字声明为全局变量:
def outer_function(x, y, z):
def inner_function(a, b, c):
pass
pass
在上面的代码中,inner_function直到调用了outer_function才会存在。一旦outer_function执行完毕,inner_function就会被销毁。
嵌套的内部函数可以访问封闭函数的本地命名空间。
从严格意义上说,所有函数都是局部作用域。
多个返回值
在数据分析和其他科学应用程序中,您可能会发现自己经常这样做,因为许多函数可能有多个输出,无论这些输出是数据结构还是在函数中计算的其他辅助数据。
如果你考虑元组的打包和解包,你会意识到这里发生的事情是,函数实际上只是返回一个对象,即一个元组,然后被解包到结果变量中:
在本例中,return_value将是一个包含三个返回变量的3元组。像上面那样返回多个值的一个潜在的有吸引力的替代方法可能是返回一个dict:
def f():
a = 5
b = 6
c = 7
return {'a' : a, 'b' : b, 'c' : c}
逻辑运算符
if,elif,else
a = 5; b = 7
c = 8; d = 4
if a < b or c > d:
print('Made it')
if x < 0:
print 'It's negative'
elif x == 0:
print 'Equal to zero'
elif 0 < x < 5:
print 'Positive but smaller than 5'
else:
print 'Positive and larger than or equal to 5'
if x < 0:
print "It's negative"
for
sequence = [1, 2, None, 4, None, 5]
total = 0
for value in sequence:
print(value)
if value is None:
continue
total += value
print("total:", total)
在循环中,break和continue的用法是不变的。
while
x = 256
total = 0
while x > 0:
if total > 500:
break
total += x
x = x // 2
pass
它可以在不需要采取任何行动的区块中使用;它是必需的,因为Python使用空格来分隔块:
if x < 0:
print('negative!')
elif x == 0:
# TODO: put something smart here
pass
else:
print('positive!')
string
你可以用单引号或双引号来写字符串字面值:
a = 'one way of writing a string'
b = "another way"
对于带换行符的多行字符串,可以使用三重引号,“'”或“””
强制类型转换
字符串是一个字符序列,因此可以像对待其他序列一样对待它,比如列表和元组:
转义字符\
如果你的字符串中有很多反斜杠而没有特殊字符,那么您可能会觉得这有点烦人。幸运的是,你可以在字符串的前引号加上r,这意味着字符应该被解释为:
字符串合并
% in string
字符串模板或格式化是另一个有用的主题。随着Python 3的出现,这样做的方法的数量有所增加,这里我将简要描述其中一个主要接口的机制。
带有%后跟一个或多个格式字符的字符串是将值插入到该字符串中的目标(这与C中的printf函数非常相似)。
这里的用法和c的printf函数非常相似。 在这个字符串中,%s表示将参数格式化为字符串%.2f是有两位小数的数字,%d是整数。要替换这些格式形参的实参,请使用二元运算符%和一个值元组.
日期和时间
内置的Python datetime模块提供了datetime、date和time类型。
strftime方法将datetime格式为字符串:
字符串可以使用strptime函数转换(解析)为datetime对象:
将分钟和秒字段替换为0,生成一个新对象:
两个datetime相减可以得到一个新的datetime:
Imports
我个人认为Imports和extern的作用相同。在Python中,模块只是一个包含函数和变量定义的.py文件,以及从其他.py文件导入的这些东西。假设我们有以下模块:
# some_module.py
PI = 3.14159
def f(x):
return x + 2
def g(a, b):
return a + b
如果我们想要访问some_module.py中定义的变量和函数,可以从同一个目录中的另一个文件中访问:
import some_module
result = some_module.f(5)
pi = some_module.PI
或者:
from some_module import f, g, PI
result = g(5, PI)
通过使用as关键字,可以为导入提供不同的变量名称:
import some_module as sm
from some_module import PI as pi, g as gf
r1 = sm.f(pi)
r2 = sm.gf(6, pi)
print(r1)