基本功-Python小例子1-50

鱼每天都练习基本功,台上十分钟台下十年功,编程写代码或许也需要这样子的,就用python小例子来练习吧

Posted by Valuebai on February 19, 2020

1 求绝对值或复数的模

>>> abs(-6)
6

2 元素都为真

# 接受一个迭代器,如果迭代器的所有元素都为真,那么返回 True,否则返回 False
all([1,0,3,6])
False

all([1,2,3])
True

3 元素至少有一个为真

# 接受一个迭代器,如果迭代器里至少有一个元素为真,那么返回 True,否则返回 False
any([0,0,0,[]])
False

any([0,0,1])
True

4 ascii 展示对象

# 调用对象的 repr() 方法,获得该方法的返回值,如下例子返回值为字符串
class Student(object):
    def __init__(self, id, name):
        self.id = id
        self.name = name

    def __repr__(self):
        return 'id=' + self.id + ', name=' + self.name


xiaoming = Student(id='001', name='xiaoming')

print(
    xiaoming
)

print(
    ascii(xiaoming)
)

5 十转二

# 将十进制转为二进制

bin(10)

'0b1010'

6 十转八

# 将十进制转为八进制

oct(9)

'0o11'

7 十转十六

# 将十进制转为十六进制

hex(15)

'0xf'

8 判断是真是假

# 测试一个对象是True, 还是False
bool([0,0,0])
True


bool([])
False


bool([1,0,1])
True

9 字符串转字节

# 将一个字符串转换成字节类型
s = "apple"

bytes(s, encoding='utf-8')
b'apple'

10 转为字符串

# 将字符类型、数值类型等转换为字符串类型
i = 100
str(i)
'100'

11 是否可调用

# 判断对象是否可被调用,能被调用的对象就是一个 callable 对象,比如函数 str,
int 等都是可被调用的,但是例子 4 中 xiaoming 实例是不可被调用的:

callable(str)
True

callable(int)
True

callable(xiaoming)
False

12 十转 ASCII

# 查看十进制整数对应的 ASCII 字符
chr(65)
'A'

13 ASCII 转十

# 查看某个 ASCII 字符对应的十进制数
ord('A')
65

14 静态方法

# classmethod 装饰器对应的函数不需要实例化,不需要 self 参数,但第一个参数需
要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等。
class Student(object):
    def __init__(self, id, name):
        self.id = id
        self.name = name

    def __repr__(self):
        return 'id=' + self.id + ', name=' + self.name
    
    @classmethod
    def f(cls):
        print(cls)

15 执行字符串表示的代码

# 将字符串编译成 python 能识别或可执行的代码,也可以将文字读成字符串再编译。
s = "print('valuebai')"
r = compile(s, "<string>", "exec")
print(r)
exec(r)

16 创建复数

# 创建一个复数
complex(1,2)
(1+2j)

17 动态删除属性

# 删除对象的属性


18 转为字典

# 创建数据转为字典
dict()
{}

dict(a='a', b='b')
{'a':'a', 'b':'b'}


dict(zip(['a', 'b'], [1,2]))
{'a':1, 'b':2}

dict([('a', 'b'), (1,2)])
{'a':1, 'b':2}

19 一键查看对象所有方法

# 不带参数时返回当前范围内的变量、方法和定义的类型列表;带参数时返回参数的属性,
方法列表

In [96]: dir(xiaoming)
Out[96]:
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__',
'__subclasshook__', '__weakref__', 'name']

20 取商和余数

# 分别取商和余数
divmod(10,3)
(3,1)

21 枚举对象

# 返回一个可以枚举的对象,该对象的 next() 方法将返回一个元组
s = ['a', 'b', 'c']
for i, v in enumerate(s):
    print(i, v)

22 计算表达式

# 将字符串str当成有效的表达式来求值并返回计算结果提取出字符串中的内容
s = "1+3+5"
eval(s)


9

23 查看变量所占字节数

import sys
a = {'a':1, 'b':2.0}
sys.getsizeof(a)


240


24 过滤器

# 在函数中设定过滤条件,迭代元素,保留返回值为True的元素:
fil = filter(lamda x: x>10,[1,11,2,45,7,6,13])
list(fil)


[11,45,13]

25 转为浮点类型

# 将一个整数或数值型字符串转换为浮点数
float(3)

3.0

如果不能转为浮点数,会报ValueError:
比如: float('a')

26 字符串格式化

# 格式化输出字符串,format(value, formatspec)实质上是调用了value的 ***for-mat*(formatspec)方法。
print("i am {0}, age{1}".format("tom",18))

i am tom, age18

27 冻结集合

# 创建一个不可修改的集合,因为不可修改,所以没有像set那样的add和pop方法
frozenset([1,1,3,2,3])


frozenset({1, 2, 3})

28 动态获取对象属性

# 获取对象属性
class Student(object):
    def __init__(self, id, name):
        self.id = id
        self.name = name

    def __repr__(self):
        return 'id=' + self.id + ', name=' + self.name


xiaoming = Student(id='001', name='xiaoming')
getattr(xiaoming, 'name') # 获取xiaoming这个实例的name属性值


29 对象是否有这个属性

class Student(object):
    def __init__(self, id, name):
        self.id = id
        self.name = name

    def __repr__(self):
        return 'id=' + self.id + ', name=' + self.name


xiaoming = Student(id='001', name='xiaoming')
hasattr(xiaoming, 'name')
->True

hasattr(xiaoming, 'phone')
->False

30 返回对象的哈希值

# 返回对象的哈希值,值得注意的是自定义的实例都是可哈希的,list,dict,set等可变对象都是不可哈希的
hash(xiaoming)
->6139638

hash([1,2,3])
->报错


31 一键帮助

# 返回对象的帮助文档
help(xiaoming)

32 对象门牌号

# 返回对象的内存地址
id(xiaoming)


33 获取用户输入

# 获取用户输入内容
input('请输入')

34 转为整型

# int(x, base=10), x可能为字符串或数值,将x转换为一个普通整数。如果参数是字符串,那么它可能包含符号和小数点。如果超出了普通整数的表示范围,一个长整数被返回。
int('12', 16)
->18


35 isinstance

# 判断object是否为类classinfo的实例,是返回True
class Student(object):
    def __init__(self, id, name):
        self.id = id
        self.name = name

    def __repr__(self):
        return 'id=' + self.id + ', name=' + self.name


xiaoming = Student(id='001', name='xiaoming')

isinstance(xiaoming, Student)
->True

36 父子关系鉴定

class undergraduate(Student):
    def studyClass(self):
        pass
    def attendActivity(self):
        pass

print(issubclass(undergraduate, Student))
-> True

issubclass(object, Student)
-> False

issubclass(Student, object)
-> True

# 如果class是classinfo元组中某个元素的子类,也会返回True
issubclass(int, (int, float))
-> True

37 创建迭代器类型

# 使用iter(obj, sentinel),返回一个可迭代对象,sentinel可省略(一旦迭代到此元素,立即终止)
lst = [1, 3, 5]

for i in iter(lst):
    print(i)
	
	
class TestIter(object):
    def __init__(self):
        self.l = [1, 3, 2, 3, 4, 5]
        self.i = iter(self.l)

    def __call__(self):  # 定义了__call__ 方法的类的实例是可调用的
        item = next(self.i)
        print("__call__ is called, fowhich would return", item)
        return item

    def __iter__(self):  # 支持迭代协议(即定义有__iter__() 函数
        print("__iter__ is called")
        return iter(self.i)


t = TestIter()
print(t())

for e in TestIter():
    print(e)

38 所有对象之根

#object 是所有类的基类
o = object()
type(0)
->object


39 打开文件

# 用with oepn(),不用open()


40 次幂

# base 为底的exp次幂,如果mod给出,取余
pow(3,2,4)  # 3的2次幂,取4的余数
->1

41 打印

lst = [1,3,5]

print(lst)

print('lst:', lst)

print(f'key:{lst}'})

print('lst:{}'.format(lst))

42 创建属性的两种方式

# 返回property属性,典型的用法:
class C:
	def __init__(self):
		self._x = None
	def getx(self):
		return self._x
	def setx(self, value):
		self._x = value
	def delx(self):
		del self._x
	
	#使用property 类创建property属性
	x = property(getx, setx, delx, "I'm the 'x' property")
	

使用python装饰器,实现与上面的代码是一样效果的

# 返回property属性,典型的用法:
class C:
	def __init__(self):
		self._x = None
		
	@property
	def x(self):
		return self._x
		
	@x.setter
	def x(self, value):
		self._x = value
		
	@x.deleter
	def delx(self):
		del self._x

	

43 创建range序列

# 1)range(stop)
# 2)range(start, stop[,step])
# 生成一个不可变序列
range(11)
->range(0,11)

range(0,11,1)
->range(0,11)

44 反向迭代器

rev = reversed([1,4,2,3,1])
for i in rev:
	print(i)

45 四舍五入

# 四舍五入,ndigits 代表小数点后保留几位:
round(10.0232323232, 3)
-> 10.023

46 转为集合类型

# 返回一个set对象, 集合内不允许有重复元素:
a = [1,4,2,3,1]
set(a)

->{1,2,3,4}

47 转为切片对象

# class slice(start, stop[, step])
# 返回一个表示由range(start, stop, step)所指定索引集的slice对象,它让代码可读性、可维护性变好。
a = [1,4,2,3,1]
my_slice_meaning = slice(0.5.2)
a[my_slice_meaning]

->[1,2,1]

48 拿来就用的排序函数

a = [1,4,2,3,1]

sorted(a, reverse=True)
-> [4,3,2,1,1]

a = [
    {
        'name': 'xiaoming',
        'age': 18,
        'gender': 'male',

    },
    {
        'name': 'xiaohong',
        'age': 11,
        'gender': 'female',
    }

]
a = sorted(a, key=lambda x: x['age'], reverse=False)
print(a)


->[{'name': 'xiaohong', 'age': 11, 'gender': 'female'}, {'name': 'xiaoming', 'age': 18, 'gender': 'male'}]

49 求和函数

a = [1,4,2,3,1]

sum(a)
->11

sum(a,10)
->21

50 转元组

# tuple() 将对象转为一个不可变的序列类型

i_am_list = [1,3,5]
i_am_tuple = tuple(i_am_list)
print(i_am_tuple)
->(1,3,5)

【环境】 win10_x64 + python3.6.5

【Me】 https://github.com/Valuebai/ https://valuebai.github.io/

【参考】 1、出处:https://github.com/jackzhenguo/python-small-examples