切片
取一个list或tuple的部分元素是非常常见的操作。
我们可以需要用到循环甚至一个一个取得到列表中的数据,但是用到切片,这一切将变得简单
下面取了列表中的第2,3项
L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
L[1:3]
结果
['Sarah', 'Tracy']
这里是对1-100的数字每隔10倒序输出
to_one_hundred = range(1, 101)
# Add your code below!
backwards_by_tens = to_one_hundred[::-10]
print backwards_by_tens
结果
[100, 90, 80, 70, 60, 50, 40, 30, 20, 10]
lambda的使用
当您需要一个快速函数来为您完成一些工作时,Lambda 非常有用。
找到对应的字符串
languages = ["HTML", "JavaScript", "Python", "Ruby"]
# Add arguments to the filter()
print filter(lambda x: x == "Python", languages)
处理字段
garbled = "IXXX aXXmX aXXXnXoXXXXXtXhXeXXXXrX sXXXXeXcXXXrXeXt mXXeXsXXXsXaXXXXXXgXeX!XX"
message = filter(lambda x: x != 'X',garbled)
print message
按位运算符简介
print 5 >> 4 # Right Shift
print 5 << 1 # Left Shift
print 8 & 5 # Bitwise AND
print 9 | 4 # Bitwise OR
print 12 ^ 42 # Bitwise XOR
print ~88 # Bitwise NOT
结果
0
10
0
13
38
-89
左移,右移
# Left Bit Shift (<<)
0b000001 << 2 == 0b000100 (1 << 2 = 4)
0b000101 << 3 == 0b101000 (5 << 3 = 40)
# Right Bit Shift (>>)
0b0010100 >> 3 == 0b000010 (20 >> 3 = 2)
0b0000010 >> 2 == 0b000000 (2 >> 2 = 0)
按位和
a: 00101010 42
b: 00001111 15
===================
a & b: 00001010 10
按位或
a: 00101010 42
b: 00001111 15
================
a | b: 00101111 47
异或
a: 00101010 42
b: 00001111 15
================
a ^ b: 00100101 37
按位 NOT
按位 NOT 运算符 () 只是将所有位翻转为一个数字。这对计算机的实际意义实际上非常复杂,所以我们不打算深入探讨。只要知道,从数学上讲,这相当于在数字上加一,然后把它变成负数。
将第N位的数翻转
def flip_bit(number, n):
bit_to_flip = 0b1 << (n -1)
result = number ^ bit_to_flip
return bin(result)
print flip_bit(0b110110,5)
Python面向对象
面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
基本格式
class Triangle(object):# 定义了一个类,里面有名字和分数的定义
number_of_sides = 3
def __init__(self, angle1, angle2, angle3):# 特殊方法“__init__”前后分别有两个下划线!!
self.angle1 = angle1
self.angle2 = angle2
self.angle3 = angle3
my_triangle = Triangle(90,30,60)
访问限制
如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问,所以,我们把Student类改一改:
class Triangle(object):# 定义了一个类,里面有名字和分数的定义
number_of_sides = 3
def __init__(self, angle1, angle2, angle3):# 特殊方法“__init__”前后分别有两个下划线!!
self.__angle1 = angle1
self.__angle2 = angle2
self.__angle3 = angle3
继承
最大的好处是子类获得了父类的全部功能。由于Animial实现了run()方法,因此,Dog和Cat作为它的子类,什么事也没干,就自动拥有了run()方法:
继承的第二个好处需要我们对代码做一点改进。就可以改变内容
class Triangle(object):
number_of_sides = 3
def __init__(self, angle1, angle2, angle3):
self.angle1 = angle1
self.angle2 = angle2
self.angle3 = angle3
class Equilateral(Triangle):
angle = 60
def __init__(self):
self.angle1 = self.angle
self.angle2 = self.angle
self.angle3 = self.angle
关于汽车的例子
class Car(object):
condition = "new"
def __init__(self, model, color, mpg):
self.model = model
self.color = color
self.mpg = mpg
def display_car(self):
print "This is a %s %s with %s MPG." % (self.color, self.model, str(self.mpg))
def drive_car(self):
self.condition = "used"
my_car = Car("DeLorean", "silver", 88)
print my_car.condition
my_car.drive_car()
print my_car.condition
class ElectricCar(Car):
def __init__(self,model,color,mpg,battery_type):
self.model = model
self.color = color
self.mpg = mpg
self.battery_type = battery_type
def drive_car(self):
self.condition = "like new"
my_car = ElectricCar("DeLorean", "silver", 88, "molten salt")
print my_car.condition
my_car.drive_car()
print my_car.condition