python学习-3

  • enumerate()函数:用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中

  • sorted()函数:对所有可迭代的对象进行排序操作(链接内含sort()函数与sorted()函数区别)

  • lower()函数:将字符串中所有字母进行小写操作,(不能对其他类型数据进行操作,会报错)

  • items()函数:以列表返回可遍历的(键,值)元组数组,(xxx.items())


lambda : 匿名函数

装饰器(Decorator)是通过python的@语法实现的

OOP(Object Oriented Programming):面向对象的编程,是一种程序设计思想

  • 数据封装、继承和多态只是面向对象程序设计中最基础的3个概念

Python允许使用多重继承,因此,MixIn 就是一种常见的设计

如果想将一个类用作for … in循环,类似list或tuple,那么必须有一个__iter__()方法来返回一个迭代对象,但是要注意他就是一个类,当然经过实验发现你通过类建立实例也可以等价的做for循环,注意__iter__要配合__next__使用

我们自己定义的类表现得和Python自带的list、tuple、dict没什么区别,这完全归功于动态语言的“鸭子类型”,不需要强制继承某个接口。

__call__()还可以定义参数。对实例进行直接调用就好比对一个函数进行调用一样,所以你完全可以把对象看成函数,把函数看成对象,因为这两者之间本来就没啥根本的区别

通过callable()函数,我们就可以判断一个对象是否是“可调用”对象。

Python的class允许定义许多定制方法,可以让我们非常方便地生成特定的类。

本节介绍的是最常用的几个定制方法,还有很多可定制的方法,请参考Python的官方文档


借用一个例子深刻理解__str____repr____getattr____call__

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
输出个性化URL:
class Chain(object):
def __init__(self, path=''):
self.__path = path

def __getattr__(self, path):
return Chain('%s/%s' % (self.__path, path))

def __call__(self, path):
return Chain('%s/%s' % (self.__path, path))

def __str__(self):
return self.__path

__repr__ = __str__

print(Chain().users('michael').repos) # /users/michael/repos

python的枚举类型

正常情况下,我们都用class Xxx...来定义类,但是,type()函数也允许我们动态创建出类来

python学习-2

函数的各种参数类型,廖雪峰的博客

今天主要学习了函数,函数参量的种类和一些注意事项

  • From xx import xxx 可以从xx.py文件中引用函数xxx(…)

  • isinstance(object, classinfo) object-实例对象、classinfo-可以是直接或间接类名、基本类型或者由它们组成的元组;相比于type(),建议使用isinstance()

  • x**n 变量的高次幂的表示形式

  • def f2(a, b, c=0, *, d, **kw): 函数的参数组合,注意顺序;此外,对于任意函数,都可以通过类似func(args, *kw)的形式调用它,无论它的参数是如何定义


  • 递归函数,思路很重要,自己的理解能力还是太弱了,加强锻炼吧!

递归函数的经典问题:汉诺塔;例程函数如下

1
2
3
4
5
6
7
8
9
def hanoi(n,a,b,c):
# 当n为1时 (递归基础)
if n == 1:
print(a, '-->', c) # 将A柱最底层的圆盘移动到C柱
# 当n大于1时
else:
hanoi(n-1, a, c, b) # 借助C柱,将n-1个圆盘从A柱移动到B柱
print(a, '-->', c) # 将A柱最底层的圆盘移动到C柱
hanoi(n-1, b, a, c) # 借助A柱,将n-1个圆盘从B柱移动到C柱

  • range()函数用法 range(start, stop[, step]) 基本用于for循环,生成列表或元组的一般表达形式list(range(x,x,x))tuple(range(x,x,x))

Python!

python学习目前进度,廖雪峰的教程

  • 本来创建博客的想法是想记录学习python的过程,结果一个hexo博客花了我四五天的时间,不过还好搞出来了,有点小成就感,好了现在继续学习Python!!gogogo

以下是最新写的一个非常简单的成绩查询小程序,注意,有失败的地方已经标出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#2020.3.9
#学习python第二个小程序
#计算今年成绩较去年的变化
n=1
m=1

while n==1:
#输入若干信息
name=input('请输入学生姓名:');print('\n')
s1=input('请输入%s去年的成绩:'%name)

while m==1:#这样的方法失败了,目前无法解决成绩输入不是数字的重复正确输入问题
if type(s1)==float or type(s1)==int:
if s1>=0:
m=0
s2=float(input('请输入%s今年的成绩:'%name));print('\n')
else:
s1=input('输入失败,请正确输入%s去年的成绩:'%name)
else:
s1=input('输入失败,请正确输入%s去年的成绩:'%name)

else:

#判断成绩走向并计算变化率
if s2>s1:
rate=(s2-s1)/s2*100
print('%s同学你好,祝贺你进步了,成绩增长率为 %.2f%%\n'%(name,rate))

elif s1==s2:
print('%s同学你好,不错,成绩保持住了\n'%name)
rate=0.00

else:
rate=(s1-s2)/s2*100
print('%s同学你好,很遗憾你退步了,成绩下降率为 %.2f%%\n'%(name,rate))

n=int(input('如果希望继续查询,请输入1,否则输入其他任意键退出'))

else:
#结尾
print('欢迎再次使用,再见')
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×