python基础
工具使用
- 要点记录:
1)IPython和Jupyter可以在代码执行过程中进行交互,方便探索,并且它将许多Python对象被格式化为更易读的形式;
2)Jupyter中%run的简单使用:
a. %run *.py可以运行python程序,可以直接加入参数,但是参数是以字符串的形式传入;
b. 在当前命名空间中已经定义过的变量,可以在自己的代码中直接调用,但是要在%run 运行时,带上参数-i;
比如,在命名空间中定义了一个变量d,然后在程序调用该参数。
c.可以通过使用%load函数,将代码导入到代码块中。导入时要使用>>> ,如上图。
3)Jupyter中魔术函数可以直接赋值给变量,如图:
语言语义
1.一般使用tab键或四个空格键缩进;
2.python的所有事物,包括数值,字符串,数据结构,函数,类等都是python对象;python提供了对象模型的一致性,这使得python非常灵活;
3.理解Python的引用的含义,数据是何时、如何、为何复制的,是非常重要的,尤其是当你用Python处理大的数据集时;
4.当你将一个对象作为参数传递给一个函数时,在函数内部接收该对象的变量名就指向了这个对象,而不是将该对象复制给新的变量。因此,在函数中改变对象的值,上层的值也会改变;
5.对象引用不包含类型信息,类型信息保存在对象自身中,每个对象都有明确的类型,Python是强类型语言;
6.Python对象的属性和方法可以通过obj.attribute_name访问,也可以通过getattr函数和相关的hasattr和setattr函数访问,使用后者可以高效编写原生的、可重复使用的代码;
7.可以用isinstance函数检查对象是某个类型的实例:
7.鸭子类型(Duck typing):一个对象有效的语义,不是由继承自特定的类或实现特定的接口(比如java中的继承),而是由当前方法和属性的集合决定;鸭子类型使得python的程序并不检查在调用函数时所传递的参数是否正确,而是通过在函数内部调用方法时判断传入的对象是否存在该方法,比如下面的 代码
:
首先,定义两个具有相同方法的类:
class duck():
def walk(self):
print('I walk like a duck')
def swim(self):
print('i swim like a duck')
class person():
def walk(self):
print('this one walk like a duck')
def swim(self):
print('this man swim like a duck')
定义一个函数,并用该函数接收上述两个类的实例,如下:
def watch_duck(animal):
animal.walk()
animal.swim()
small_duck = duck()
watch_duck(small_duck)
output >>
I walk like a duck
i swim like a duck
duck_like_man = person()
watch_duck(duck_like_man)
output >>
this one walk like a duck
this man swim like a duck
可以看到,该函数并不会检查传入的实例,而是直接通过实例调用各自的方法;如果传入的实例中,要调用的方法不存在,则程序就会报错,如下:
class Lame_Foot_Duck():
def swim(self):
print('i am lame but i can swim')
lame_duck = Lame_Foot_Duck()
watch_duck(lame_duck)
output >>
AttributeError: Lame_Foot_Duck instance has no attribute 'walk'
8.可以通过import关键字导入.py文件,并使用.py文件中的变量,函数等,比如有如下代码片段:
#test.py;
PI = 3.1415
def f(x):
return x + 2
def g(a, b):
return a + b
在同一个相同路径下可以这样连接到上述文件中的变量,函数:
import test
result = test.f(5)
pi = test.PI
9.比较特殊的运算符:
1). a / b 表示除; a // b 表示整除; a ** b 表示a的b次方;
2). is 和is not 最常用于检查一个变量是否为none;
10.python中的可变对象包括:列表,字典,数组等;不可变对象包括字符串,元组等;(建议能使用不可变对象,就是用不可变对象,因为修改可变对象,可能会引入副作用);
标量类型
1.概念:用于处理数值数据、字符串、布尔值,和日期时间。这些单值类型被称为标量类型;
2.数字类型:包括int类型和float类型;int类型可以存储任意大小数字,float类型时双精度64位浮点数;
3.字符串:python中字符串是不可变的,可以使用replace函数对字符串进行替换,如下:
4.反斜杠符号\是转义字符,可以指定特殊符号,比如\n,\,'等;如果要在字符串中使用特殊符号,就需要将其转义;如果字符串中有大量反斜杠符号时,可以在字符串前加一个前缀符号r,表明这些字符时原生字符,如下:
5.str、bool、int和float既是标量类型,也是函数,可以用来转换类型;
6.Python内建的datetime模块提供了datetime、date和time类型。datetime类型结合了date和time,是最常使用的;
7.可以通过strptime将字符串转换为datetime对象,也可以通过strftime函数将datetime对象转换为字符串;另外,可以分别通过date和time从datetime实例中取出其对象,如下:
8.datetime是不可变类型数据,但是在处理时间序列数据时,有时需要修改datetime的值,这时可以用dt.replace方法进行替换,但是这种替换不是修改datetime对象的值,而是生成新的对象,并将值放入其中,如下:
9.两个datetime类型数据的差会形成datetime.timedelta类型数据,将timedelta添加到datetime,会产生一个新的偏移datetime;如下:
控制流
1.python控制流与其他语言基本相同,这里不再记录;需要注意的是,在程序中有时要用到pass语句占位表示不执行任何操作,因为python是用缩进分割代码;
2.range(起始,结尾,步长)是在循环控制中经常使用的用于遍历的函数,它可以产生一个左闭右开的序列,如下:
3.Python中的三元表达式可以将if-else语句放到一行里,形式如下:
value = true-expr if condition else false-expr
虽然使用三元表达式可以压缩代码,但会降低代码可读性,一般不推荐使用;