200623-Python url编码

Python提供了较好的url编码封装,常借助 parse来实现,一般常见的使用姿势有两种

1
2
3
4
5
6
7
8
9
10
11
12
>>> from urllib import parse
# 直接对字符串进行url编码
>>> parse.quote('一灰灰Blog')
'%E4%B8%80%E7%81%B0%E7%81%B0Blog'
# 解码
>>> parse.unquote('%E4%B8%80%E7%81%B0%E7%81%B0Blog')
'一灰灰Blog'

# 对一个字典进行url编码,并组装成url参数
>>> p = {'a': '12+23', 'b': '一灰灰blog'}
>>> parse.urlencode(p)
'a=12%2B23&b=%E4%B8%80%E7%81%B0%E7%81%B0blog'

200527-Python 获取本机Ip和主机名

python中获取本机ip以及主机名

1
2
3
4
import socket

hostname = socket.gethostname()
ip = socket.gethostbyname(hostname)

200109-Python redis使用手册上篇

本文可作为redis的操作指南,介绍redis命令对应的python使用姿势

191015-Python markdown转html

本篇将介绍如何利用python来实现markdown文档转html

1. 依赖安装

我们主要借助 python-markdown这库来实现markdown转html的功能,官方安装教程如下

https://python-markdown.github.io/install/

python的依赖包安装相对简单,直接使用pip

1
pip install markdown

191009-Python之定义函数参数、返回类型

python虽然是一个弱类型的语言,在编码中,不需要特别声明参数类型,然而在实际的场景中,这种不现实指定参数类型经常会带来预期之外的问题,而且编译器还不会提示错误

如果我有一个函数,对参数类型和返回类型都有要求,可以怎么做?

1
2
def 函数名(参数: 参数类型...) -> 返回值类型:
pass

190808-Python CSV读写解决中文乱码问题

一般而言,我并不会直接操作excel文件,如果需要输出表格的时候,我会选择csv文件,用英文逗号来分割不同的单元格;csv文件的优点是简单,文本格式,vim可以直接打开编辑,excel也可以打开可以方便的转换为excel文档;可以说即适合开发人员,也适合给运营同学

然而有个蛋疼的问题,csv文件中文乱码问题,下面记录下,在python中如何解决

190717 Python 内置函数之zip

接收一个or多个迭代器,将对象中对应的元素打包成一个个元组,如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同

1
2
3
4
5
6
7
>>> list(zip([1,2,3], ['a', 'b', 'c']))
[(1, 'a'), (2, 'b'), (3, 'c')]
>>> list(zip([1,2,3], ['a', 'b', 'c'], ['!', "@"]))
[(1, 'a', '!'), (2, 'b', '@')]

>>> list(zip(*[(1, 4), (2, 5), (3, 6)]))
[(1, 2, 3), (4, 5, 6)]

说明:借助*可以将zip打包的元组解压为之前的数据

190717 Python 内置函数之vars

返回对象object的属性和属性值的字典对象

1
2
3
4
5
6
>>> class A:
... x = 10
... y = 20
...
>>> vars(A)
mappingproxy({'__module__': '__main__', 'x': 10, 'y': 20, '__dict__': <attribute '__dict__' of 'A' objects>, '__weakref__': <attribute '__weakref__' of 'A' objects>, '__doc__': None})

190717 Python 内置函数之type

返回参数类型

  • type: 不认为子类与父类类型相同
  • isinstance: 子类是一种父类类型

语法

1
2
type(object)
type(name, bases, dict)

上面两种用法表示的含义不同

  • 一个参数:返回对象类型
  • 三个参数:根据定义返回一个新的类型对象
    • name 类名
    • bases 父类
    • dict 字典

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> type('str')
<class 'str'>
>>> type(b'123')
<class 'bytes'>
>>> type('123')
<class 'str'>

>>> x = type('x', (object,), dict(a=1))
>>> x
<class '__main__.x'>
>>> a = x()
>>> a.a
1

190717 Python 内置函数之tuple

将可迭代系列(如列表)转换为元组

1
2
3
4
>>> tuple([1,2,3])
(1, 2, 3)
>>> tuple({'a': 1, 'b': 2})
('a', 'b')

190717 Python 内置函数之super

访问父类中的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>>> class A:
... def m(self):
... return 'A'
>>> class B:
... def m(self):
... return 'B'
...

>>> class C(A):
... def m(self):
... print(super().m())
...
>>> C().m()
A

>>> class D(A,B):
... def m(self):
... a = super(D, self).m()
... print(a)
...
>>> D().m()
A

注意,在多继承时,会从左到右找匹配的方法,广度优先

190717 Python 内置函数之str

将对象转化为字符串

1
2
3
4
5
6
7
8
>>> str([1,2,3])
'[1, 2, 3]'
>>> str((1,'a'))
"(1, 'a')"
>>> str({'a': 123, 'b': 456})
"{'a': 123, 'b': 456}"
>>> str(b'hello')
"b'hello'"

190717 Python 内置函数之staticmethod

修饰静态方法

1
2
3
4
5
6
7
>>> class A:
... @staticmethod
... def m():
... return 10
...
>>> A.m()
10

190717 Python 内置函数之sorted

对所有可迭代的对象进行排序

1. 语法

1
sorted(iterable, key=None, reverse=False)
  • iterable: 可迭代对象
  • key: 用于比较排序的元素
  • reverse: True降序 False升序

返回排好序的列表

2. 实例

1
2
3
4
5
6
7
8
>>> a = [1,3, 2, 9, 4]
>>> sorted(a)
[1, 2, 3, 4, 9]
>>> a
[1, 3, 2, 9, 4]
>>> a.sort()
>>> a
[1, 2, 3, 4, 9]

注意:列表的sort()方法无返回直接作用于列表; sorted()有返回,原对象不变

1
2
3
>>> a=[('b',2),('a',1),('c',3),('d',4)]
>>> sorted(a, key=lambda x:x[1])
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]

II. 其他

1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

3. 扫描关注

一灰灰blog

QrCode

190717 Python 内置函数之slice

切片,主要用于切片操作函数里的参数

语法

1
2
slice(stop)
slice(start, stop[,step]
  • start: 开始位置
  • stop: 结束位置
  • step: 步长

举例

1
2
3
4
>>> list(range(0, 10))[slice(4)]
[0, 1, 2, 3]
>>> list(range(0, 10))[slice(2, 8, 3)]
[2, 5]

190717 Python 内置函数之setattr

与 getattr对应,设置属性值(属性可以不存在)

1
2
3
4
5
6
7
class A:
... x = 10
...
>>> a = A()
>>> setattr(a, 'b', 20)
>>> a.b
20

190717 Python 内置函数之set

创建一个无序不重复元素集

1
2
3
4
>>> set([1,2,3,2,1])
{1, 2, 3}
>>> set('hello')
{'h', 'o', 'e', 'l'}

注意传参为可迭代对象

190716 Python 内置函数之round

返回浮点数 x 的四舍五入值,准确的说保留值将保留到离上一位更近的一端(四舍六入)

会有精度丢失,要求高的,不要用

1
2
3
4
5
6
>>> round(2.674, 2)
2.67
>>> round(2.675, 2)
2.67
>>> round(2.6751, 2)
2.68

注意,如果保留位的后一个为5时,需要再往后看一位,如果有,则进;没有则舍

190716 Python 内置函数之repr

返回对象的string格式

1
2
3
4
5
6
7
8
9
>>> repr([1,2,3])
'[1, 2, 3]'
>>> repr('bca')
"'bca'"
>>> class A:
... x = 10
...
>>> repr(A())
'<__main__.A object at 0x10f079f98>'

190716 Python 内置函数之range

返回可迭代的对象

语法

1
range(start, stop[,step])
  • start: 默认从0开始
  • stop: 到stop结束,不包含stop
  • step: 步长

举例

1
2
3
4
>>> list(range(0, 10, 3))
[0, 3, 6, 9]
>>> list(range(2))
[0, 1]

190716 Python 内置函数之print

可以说是最常见的一个函数了,除了常见的输出在终端之外,还支持输出到文件

语法定义

1
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
  • objects: 输出的对象,用英文逗号分隔
  • sep: 多个对象输出时,间隔符号
  • end: 结尾符号
  • file: 写入的文件对象,sys.stdout标准输出
  • flush: 写文件时,如果设置True,表示强制刷新

190716 Python 内置函数之pow

计算n次方

1
2
3
4
5
6
>>> pow(4, 0.5)
2.0
>>> pow(4, 2)
16
>>> pow(100, -2)
0.0001

190716 Python 内置函数之ord

与前面介绍的chr配对,返回字unicode字符对应的ascii/unicode码

1
2
3
4
5
6
>>> ord('a')
97
>>> ord('灰')
28784
>>> chr(28784)
'灰'

190716 Python 内置函数之open

打开文件,常配合with语句使用

语法

1
open(file, mode='r',  buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

参数说明

  • file: 必需,文件路径(相对或者绝对路径)。
  • mode: 可选,文件打开模式
  • buffering: 设置缓冲
  • encoding: 一般使用utf8
  • errors: 报错级别
  • newline: 区分换行符
  • closefd: 传入的file参数类型

190716 Python 内置函数之next

返回迭代器的下一个元素

语法

1
next(iterator[,default]
  • iterator: 可迭代对象
  • default: 没有下一个元素时返回的默认值,不设置时,没有元素抛异常

实例

1
2
3
4
5
>>> a = iter([1,2,3])
>>> next(a)
1
>>> next(a)
2

从上面的case,也可以大致看出它常配合while循环一起使用

190716 Python 内置函数之min

返回给定参数中的最小值

1
2
3
4
5
6
>>> min(1,2,3)
1
>>> min([1,2,3])
1
>>> min([1,2,3], [4,3,2])
[1, 2, 3]

190716 Python 内置函数之memoryview

内存查看对象,是指对支持缓冲区协议的数据进行包装,返回元组列表

1
2
3
4
5
6
7
>>> memoryview(b'abc')
<memory at 0x10efa4348>
>>> memoryview(b'ab')
<memory at 0x10efa44c8>
>>> a = memoryview(b'ab')
>>> a[0]
97

190716 Python 内置函数之max

返回给定参数中的最大值

1
2
3
4
>>> max(1,2,3)
3
>>> max([1,2,3], [4,2,1])
[4, 2, 1]

190716 Python 内置函数之map

根据提供的函数,对传入的序列做映射

语法定义如下

1
map(function, iterable, ...)
  • function: 函数
  • iterable: 一个or多个序列
  • 返回迭代器

实例如下

1
2
3
4
5
6
7
8
9
>>> list(map(lambda x: x ** 2, [1, 2, 3, 4, 5]))
[1, 4, 9, 16, 25]

>>> for i in map(lambda x, y: x+y, [1,2,3], [10, 20, 30]):
... print(i)
...
11
22
33

190716 Python 内置函数之locals

global对象,返回全部局部变量

1
2
3
4
5
6
>>> def m():
... a = 10
... print(locals())
...
>>> m()
{'a': 10}

190716 Python 内置函数之list

将元组或字符串转换为列表

1
2
3
4
5
>>> aTuple = (123, 'hello', {'a':123})
>>> list(aTuple)
[123, 'hello', {'a': 123}]
>>> list('hello world')
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']

190716 Python 内置函数之len

len()可以用来返回字符串,列表,字典,集合,元组等的长度or个数

1
2
3
4
>>> len([1,2,3,4])
4
>>> len('1sdfa')
5

190716 Python 内置函数之iter

iter主要用来生成迭代器,简单来讲就是可以将一个obj对象,生成迭代器,可以走for循环

190716 Python 内置函数之issubclass

判断参数class 是否是类型参数 classinfo 的子类。

1
issubclass(class, classinfo)

请注意:两个参数必须都是类

这个比较好理解了,简单举例说明

1
2
3
4
5
6
7
8
>>> class A:
... x = 10
...
>>> class B(A):
... y = 10
...
>>> issubclass(B, A)
True

如果我们需要判断一个对象的类型,则推荐使用上一篇介绍的isinstance(),如

1
2
>>> isinstance(B(), A)
True

190716 Python 内置函数之isinstance

因为python是弱类型语言,所以拿到一个变量我们实际上是不确定它是什么类型的,这个时候就可以借助isinstance来判定

1
2
3
4
>>> isinstance('123', int)
False
>>> isinstance('123', str)
True

190716 Python 内置函数之int

将一个字符串或数字转换为整型

注意:int函数第二个参数可以指定进制数,实现将其他进制的字符串转换为十进制的整数

1
2
3
4
5
6
7
8
>>> int('11')
11
>>> int('11', 2)
3
>>> int('11', 8)
9
>>> int('11', 16)
17

上面分别演示的是十进制、二进制、八进制、十六进制的字符串转整数

190716 Python 内置函数之input

接收标准输入,返回String类型,用于与外界打交道

1
2
3
4
>>> a = input('enter: ')
enter: hello world
>>> a
'hello world'

190716 Python 内置函数之id

返回对象的唯一标识符,标识符是一个整数

1
2
3
4
>>> id('hello world')
4422041520
>>> id('hello worl')
4422041520

注意,上面两个字符串并不一样,但是返回的标识相同,实际上这两个字符串指向的是同一个内存,只是长度不一样而已

190716 Python 内置函数之help

help,主要就是用来显示帮助信息,如果对某个函数的用法不太清楚,就可以直接通过help来查看(在普遍用idea作为开发工具的情况下,基本上不太会用到…)

1
help('str')

190716 Python 内置函数之hash

计算一个对象or数字or字符串的hash值

1
2
3
4
>>> hash('hello world')
-2288959098694490958
>>> hash(123)
123

190716 Python 内置函数之hasattr

判断对象是否包含某个属性

1
2
3
4
5
6
7
8
9
>>> class A:
... x = 10
... y = 20
...
>>> a = A()
>>> hasattr(a, 'x')
True
>>> hasattr(a, 'z')
False

190716 Python 内置函数之globals

以字典的方式返回当前的所有的局部变量

1
2
3
>>> globals()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>}
>>>

190715 Python 内置函数之frozenset

返回一个固定的集合,不允许添加or删除、修改集合

1
>>> a = frozenset(range(10))

190715 Python 内置函数之format

字符串格式化函数 str.format()

1
2
3
4
>>> "{} {}".format("hello", "world")
'hello world'
>>> "{0} {1} {0}".format("hello", "world")
'hello world hello'

除了使用上面序号的方式,还可以用key的方式,如下

1
2
3
4
5
>>> "{name} haha {age}".format(name='yhh', age=20)
'yhh haha 20'

>>> "{name} haha {age}".format(**{"name": "yhh", "age": 18})
'yhh haha 20'

注意,传参为dict时,前面要加两个星号

数字格式化

1
2
>>> "{:.2f}".format(3.1415926)
'3.14'

190715 Python 内置函数之float

将整数和字符串转换成浮点数

1
2
3
4
>>> float(1)
1.0
>>> float('12')
12.0

190715 Python 内置函数之filter

用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换

1
filter(function, iterable)
  • function: 过滤函数
  • iterable: 序列

实例如下

1
2
3
4
5
>>> def f(s):
... return s % 2 == 0
...
>>> a = filter(f, [1,2,3,4])
>>> list(a)
Your browser is out-of-date!

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

×