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