https://github.com/zq2599/blog_demos
内容:所有原创文章分类汇总及配套原始码,涉及Java、Docker、Kubernetes、DevOPS等;
作业系统:macOS Big Sur (11.6)
Anaconda3:2021.05
python:3.7.3
Jupyter Notebook:5.7.8
还可以在花括号中添加冒号,在冒号之后添加特定的输出格式
保留小数点后三位,f表示浮点数:
串列各个元素的型别无需相同(这一点和Java阵列是不同的)
访问串列中的元素,使用方括号+索引(从0开始):
洗掉串列元素有三种方式:pop、remove、clear
pop()会弹出最后一个元素:
除了sorted,还有一些常用的全域函式和串列有关:
operator(取代原有的cmp),用于比较大小以及是否相等:
要注意的是,只有一个元素的元组也要带逗号,例如(1,),这很好理解,毕竟(1)就是个整数而已
没有括号,只有逗号,也是元组:
字典看起来很像json
items方法回传所有元素,keys回传所有键,values回传所有值:
提到Set,Java程序员应该不陌生,就是咱们经常用来排重的那个Set,是个无序元素集
集合用逗号分隔,大括号包裹:
小结三种包裹方式:串列方括号,元组圆括号,字典和集合大括号(字典的元素是键值对,集合是单个元素),另外元组可以不包裹,有逗号就行
set方法可以将串列转为集合:
集合的元素都是不可变型别的,如数值、字符串、元组
可变型别不能作为集合的元素,如串列、字典、集合,至于其中原因,看看下图红框的错误信息,如果您是个Java程序员,应该get到了:
python不支持switch
if判断的三元运算子,赋值的时候可用if else组合:
[生成表达式 for 变量 in 序列或迭代物件]
import 模块名 [as 别名]
from 模块名 import 物件名
例如:
def doHello():
print("hello world!")
doHello()
import hello
hello()
will$ python test.py
hello world!
hello world!
上述结果显然不是我们想要的,test.py只是想使用doHello方法,结果将hello.py中的doHello()也执行了,需要一种方式来避免test.py中的doHello()被执行
这时候内置变量name就派上用场了(注意前后都是两个下划线),将hello.py改成如下内容,如果执行python hello.py,内置变量name的值就是main,其他时候,例如hello.py被其他档案import的时候,它的值就是模块名(这里就是hello):
def doHello():
print("hello world!")
if __name__=='__main__':
doHello()
will$ python test.py
hello world!
will$ python hello.py
hello world!
对于Java程序员来说,包很好理解,在python中也很相似,接下来咱们尝试一下,创建名为test的包,里面有两个模块:test1和test2
加入包名为test,咱们创建名为test的档案夹
test档案夹下,新增档案init.py,这是个空档案
创建档案test1.py:
def doTest1():
print("hello test1!")
def doTest2():
print("hello test2!")
import test.test1 as test1
import test.test2 as test2
test1.doTest1()
test2.doTest2()
will$ python hello.py
hello test1!
hello test2!
Java程序员对collections包不会陌生,这里面都是一些和容器相关的类,为咱们的开发提供了极大便利,接下来看看该模块常用的几个类
namedtuple:可以用名字访问内容的元组子类,从下面的代码可见,namedtuple可以方便的定义一个物件,很像java中的bean:
from collections import namedtuple
# 自定义元组物件
Student = namedtuple('Student', ['name', 'age'])
# 实体化Student
student = Student('Tom', 11)
# 看一下student的型别
print(type(student))
# 使用name栏位
print(student.name)
# 使用age栏位
print(student.age)
will$ python test.py
<class '__main__.Student'>
Tom
11
from collections import deque
# 实体化deque
dq = deque([1,2,3])
# 队列右侧增加元素
dq.append(4)
print('1. {}'.format(dq))
# 队列左侧增加元素
dq.appendleft(5)
print('2. {}'.format(dq))
# 指定位置增加元素
dq.insert(1, 6)
print('3. {}'.format(dq))
# 最右侧元素弹出(洗掉)
dq.pop()
print('4. {}'.format(dq))
# 最左侧元素弹出
dq.popleft()
print('5. {}'.format(dq))
# 洗掉元素,注意2是值,不是位置
dq.remove(2)
print('6. {}'.format(dq))
# 倒排
dq.reverse()
print('7. {}'.format(dq))
will$ python deque.py
1. deque([1, 2, 3, 4])
2. deque([5, 1, 2, 3, 4])
3. deque([5, 6, 1, 2, 3, 4])
4. deque([5, 6, 1, 2, 3])
5. deque([6, 1, 2, 3])
6. deque([6, 1, 3])
7. deque([3, 1, 6])
from collections import OrderedDict
# 实体化
od = OrderedDict()
# 添加
od['a'] = 1
od['c'] = 2
od['b'] = 3
# 顺序是添加的先后顺序
print("1. {}".format(od))
# 打印所有的键
print(od.keys())
# 把一个字典合并进来
od.update({'e':'4'})
# 顺序是添加的先后顺序
print("2. {}".format(od))
# 根据键洗掉键值对
od.pop('a')
print("3. {}".format(od))
# 把指定键的键值对移到末尾
od.move_to_end('c')
print("4. {}".format(od))
will$ python ordered.py
1. OrderedDict([('a', 1), ('c', 2), ('b', 3)])
odict_keys(['a', 'c', 'b'])
2. OrderedDict([('a', 1), ('c', 2), ('b', 3), ('e', '4')])
3. OrderedDict([('c', 2), ('b', 3), ('e', '4')])
4. OrderedDict([('b', 3), ('e', '4'), ('c', 2)])
from collections import defaultdict
dd = defaultdict(lambda: 'ABC')
dd['a'] = 1
# 打印一个存在的键值
print(dd['a'])
# 打印一个不存在的键值
print(dd['b'])
will$ python defaultdict.py
1
ABC
from collections import Counter
# 一个普通串列
colors = ['aa', 'bb', 'cc', 'aa']
# 将串列传给Counter进行统计
result = Counter(colors)
# 打印result型别
print(type(result))
# 打印result内容
print(result)
# 用内置函数dict将Counter实体转为字典
print(dict(result))
# 取统计值最高的前两个元素
most = result.most_common(2)
# 检查most_common回传值的型别
print("most_common's type {}".format(type(most)))
# 检查most_common回传值的型别
print("most_common's value : {}".format(most))
will$ python Counter.py
<class 'collections.Counter'>
Counter({'aa': 2, 'bb': 1, 'cc': 1})
{'aa': 2, 'bb': 1, 'cc': 1}
most_common's type <class 'list'>
most_common's value : [('aa', 2), ('bb', 1)]
def 函式名([自变量串列]):
函式体
def test():
pass
再来看看几个支持lambda的内置函式,熟悉lambda的使用
filter:过滤器,下面是个过滤奇偶数的例子,第一个自变量是判断是否过滤的逻辑,True保留,第二个自变量是串列,最终奇数全部被剔除,只留下偶数:
与Java不同的是,创建物件不需要关键字new
继承:
class 派生类名 (父类名):
陈述句...
# 父类
class Student:
# 成员变量
name = '未知'
age = 11
__addr= 'ShangHai'
# 构造方法
def __init__(self, name, age, addr):
print('执行构造方法')
self.name = name
self.age = age
self.__addr = addr
def myInfo(self):
print('学生姓名[{}],年龄[{},地址[{}]]'.format(self.name, self.age, self.__addr))
class Pupil(Student):
#成员变量
grade = 1
# 构造方法
def __init__(self, name, age, addr, grade):
# 显式呼叫父类构造方法
Student.__init__(self, name, age, grade)
print('执行构造方法(子类)')
self.grade = grade
# 子类自己的方法
def myGrade(self):
print('学生年级[{}]'.format(self.grade))
a = [x*2 for x in range(10)]
try:
x = 1/0
print('不可能打印这一句')
except ZeroDivisionError as err:
print('发生例外', err)
finally:
print('执行finally')
微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...
https://github.com/zq2599/blog_demos
您的电子邮件地址不会被公开。 必填的字段已做标记 *
0 评论