浅谈python_浅谈python

摘要:自己学习python的几个笔记

1、python中的异常处理

2、一些函数的说明

3、杂项:关于迭代器、装饰器,生成器、闭包等

4、python的设模式

一、python异常处理

python异常处理使用try,catche,else和finally关键字来尝试可能未成功的操作,处理失败及正常情况以及在事后清理资源1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16try:

block_try

except Exception 1: 、、第一种except形式

block_when_exceptin_1_happen:

except (Exception_1 Exception_2 Exception_3): //第二种except形式

block_when_exception_1_or_2_or_3_happen

except Exception_5 variance:

block_when_exception_5_happen

except (Exception_6 Exception_7),variance:

block_when_exception_6_or_7_happen

except :

block_for_all_other_exceptions

else:

block_for_no_exception

finally:

block_anyway

自定义异常

自定义异常的边长方法是建立一个继承子系统异常的子类,并且需要引发该异常时用raise语句跑出异常

二、 一些函数说明

构造函数

构造函数是一种特殊的类成员方法,主要用在创建对象时初始化对象

python中的构造函数用init命名

析构函数

析构函数是构造函数的反函数,在销毁对象时调用他们,往往用来做清理善后,

例如:数据库连接对象可以在析构函数中释放对数据库实例资源的占用

python中为类定义析构函数的方法是在类中定义一个名为del的没有返回值和参数的函数

python中显示销毁对象的方法,使用del关键

静态函数和类函数

python中支持两种基于类名访问成员函数:静态函数和类函数

不同点:类函数有一个隐形参数cls可以用来获取类信息

[email protected]

[email protected]

三 杂项

迭代器

迭代器是可以迭代的对象。使用iter和next方法构建自己的迭代器。

迭代器在Python中无处不在。 它们优雅地实现在循环,推导,生成器等中,但隐藏在明显的视觉中。

Python中的迭代器只是一个可以迭代的对象。一个将一次返回数据的对象或一个元素。

Python迭代器对象必须实现两个特殊的方法iter()和next(),统称为迭代器协议,只有实现这两个方法才算是定义了一个自己的迭代器。

如果我们从中获取一个迭代器,那么一个对象被称为iterable。 大多数Python中的内置容器是列表,元组,字符串等都是可迭代的。iter()函数(这又调用iter()方法)返回一个迭代器通过Python中的迭代器迭代

使用next()函数来手动遍历迭代器的所有项目。当到达结束,没有更多的数据要返回时,它将会引发StopIteration1

2

3

4

5

6

7

8# define a list

my_list = [4, 7, 0, 3]

# get an iterator using iter()

my_iter = iter(my_list)

## iterate through it using next()

#prints 4

for i in range(4):

print(next(my_iter))在Python中构建自己的Iterator

构建迭代器在Python中很容易。只需要实现iter()和next()方法。

iter()方法返回迭代器对象本身。如果需要,可以执行一些初始化。next()方法必须返回序列中的下一个项目(数据对象)。 在到达结束后,并在随后的调用中它必须引发StopIteration异常。

在这里,我们展示一个例子,在每次迭代中给出下一个2的几次方。 次幂指数从零开始到用户设定的数字。1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18class PowTwo:

"""Class to implement an iterator

of powers of two"""

def __init__(self, max = 0):

self.max = max

def __iter__(self):

self.n = 0

return self

def __next__(self):

if self.n <= self.max:

result = 2 ** self.n

self.n += 1

return result

else:

raise StopIteration

现在可以创建一个迭代器,并通过它迭代如下 -1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16>>> a = PowTwo(4)

>>> i = iter(a)

>>> next(i)

1

>>> next(i)

2

>>> next(i)

4

>>> next(i)

8

>>> next(i)

16

>>> next(i)

Traceback (most recent call last):

...

StopIteratio

生成器与yield

在Python中构建迭代器有很多开销; 必须使用iter()和next()方法实现一个类,跟踪内部状态,当没有值被返回时引发StopIteration异常。Python生成器是创建迭代器的简单方法。上面提到的所有开销都由Python中的生成器自动处理。简单来说,生成器是返回一个可以迭代的对象(迭代器)的函数(一次一个值)。如何在Python中创建生成器?

在Python中创建生成器是相当简单的。 它使用yield语句而不是return语句来定义,与正常函数一样简单。

如果函数包含至少一个yield语句(它可能包含其他yield或return语句),那么它将成为一个生成器函数。 yield和return都将从函数返回一些值。生成器函数与正常函数的差异

1、生成器函数包含一个或多个yield语句。

2、当被调用时,它返回一个对象(迭代器),但不会立即开始执行。

3、iter()和next()之类的方法将自动实现。所以可以使用next()迭代项目。

4、一旦函数退让(yields),该函数将被暂停,并将该控制权交给调用者。

5、局部变量及其状态在连续调用之间被记住。

6、最后,当函数终止时,StopIteration会在进一步的调用时自动引发。为什么在Python中使用生成器?

1、容易实现

与其迭代器类相比,发生器可以以清晰简洁的方式实现

2、内存高效

返回序列的正常函数将在返回结果之前会在内存中的创建整个序列。如果序列中的项目数量非常大,这可是要消耗内存的。序列的生成器实现是内存友好的,并且是推荐使用的,因为它一次仅产生一个项目。

3、管道生成器

生成器可用于管理一系列操作,下面使用一个例子说明。

假设我们有一个快餐连锁店的日志文件。 日志文件有一列(第4列),用于跟踪每小时销售的比萨饼数量,我们想算出在5年内销售的总萨饼数量。假设一切都是字符串,不可用的数字标记为“N / A”。 这样做的生成器实现可以如下1

2

3

4with open('sells.log') as file:

pizza_col = (line[3] for line in file)

per_hour = (int(x) for x in pizza_col if x != 'N/A')

print("Total pizzas sold = ",sum(per_hour))

4、表示无限流

生成器是表示无限数据流的绝佳媒介。 无限流不能存储在内存中,由于生成器一次只能生成一个项目,因此可以表示无限数据流。

闭包

在函数中定义另一个函数称为嵌套函数。

嵌套函数可以访问包围范围内的变量。

在Python中,这些非局部变量只能在默认情况下读取,我们必须将它们显式地声明为非局部变量(使用nonlocal关键字)才能进行修改。1

2

3

4def num_a(x):

def num_b(y):

print(x**Y)

return num_b1

2

3c=num_a(3)

c(2)

9

1、什么时候闭包

从上面的例子可以看出,当嵌套函数引用其封闭范围内的值时,在Python中有使用了一个闭包。

在Python中创建闭包必须满足的标准将在以下几点必须有一个嵌套函数(函数内部的函数)。

嵌套函数必须引用封闭函数中定义的值。

闭包函数必须返回嵌套函数。

2、何时使用闭包?

闭包可以避免使用全局值并提供某种形式的数据隐藏。

它还可以提供面向对象的解决问题的解决方案。

当在类中几乎没有方法(大多数情况下是一种方法)时,闭包可以提供一个替代的和更优雅的解决方案。

但是当属性和方法的数量变大时,更好去实现一个类。

这是一个简单的例子,其中闭包可能比定义类和创建对象更为优先。1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19def make_multiplier_of(n):

def multiplier(x):

return x * n

return multiplier

# Multiplier of 3

times3 = make_multiplier_of(3)

# Multiplier of 5

times5 = make_multiplier_of(5)

# Output: 27

print(times3(9))

# Output: 15

print(times5(3))

# Output: 30

print(times5(times3(2)))

装饰器

为了了解装饰器,我们首先在Python中了解一些基本的东西。

Python中的一切(是的,甚至是类)都是对象。 我们定义的名称只是绑定到这些对象的标识符。 函数也不例外,它们也是对象(带有属性)。 各种不同的名称可以绑定到同一个功能对象。

函数可以作为参数传递给另一个函数。如果您在Python中使用了map,filter和reduce等功能,那么您就了解了

装饰器是将其他函数增强

1、装饰器本身是一个函数,目的用于装饰其他函数

2、增强被装饰函数的功能

3、装饰器一般接受一个函数对象作为参数以对其进行功能的增强

[email protected]用参数装饰函数1

2

3

4

5def works_for_all(func):

def inner(*args, **kwargs):

print("I can decorate any function")

return func(*args, **kwargs)

return inner在Python中链接装饰器

多个装饰器可以在Python中链接。

这就是说,一个函数可以用不同(或相同)装饰器多次装饰。只需将装饰器放置在所需函数之上。1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20def star(func):

def inner(*args, **kwargs):

print("*" * 30)

func(*args, **kwargs)

print("*" * 30)

return inner

def percent(func):

def inner(*args, **kwargs):

print("%" * 30)

func(*args, **kwargs)

print("%" * 30)

return inner

@star // 再用这个进行装饰下面的结果

@percent //先用这个进行装饰下面的函数

def printer(msg):

print(msg)

printer("Hello")

相当于1

2

3def printer(msg):

print(msg)

printer = star(percent(printer))

四、python设计模式模型视图

控制器模式

单身模式

工厂模式

生成器模式

原型模式

门面模式

命令模式

适配器模式

原型模式

装饰模式

代理模式

责任链模式

观察者模式

状态模式

策略模式

模板模式

享元模式

抽象工厂模式

面向对象模式

模型视图控制器(MVC)模型视图控制器(MVC)是最常用的设计模式。 开发人员发现很容易实现这种设计模式。以下是模型视图控制器(MVC)的基本架构

单例模式

单例模式将类的实例化限制为一个对象。 它是一种创建模式,只涉及创建方法和指定对象的一个类。它提供了创建实例的全局访问点。

工厂模式

工厂模式属于创建模式列表类别。它提供了创建对象的最佳方法。在工厂模式中,创建对象时不会将逻辑公开给客户端,并使用通用接口引用新创建的对象。

工厂模式使用工厂方法在Python中实现。 当用户调用一个方法时,传入一个字符串,并通过工厂方法实现创建一个新对象,并将此对象作为返回值。 工厂方法中使用的对象类型由通过方法传递的字符串确定。在下面的例子中,每个方法都包含对象作为参数,这是通过工厂方法实现的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值