如果你经常用 python 做一些小的项目玩, 或者用 python 做一些爬虫, 又或者你去一些网站刷题, 那么必将面对一个问题 -- 写函数.
"写函数" 也就是自己写一个算法, 用来实现一些功能. 比如最简单的给电脑两个参数, 让他计算这两个参数的关系.
下边献上 22 个函数构造练习, 将会助力大家在数据挖掘与分析方面更进一步!
建议大家收藏此文, 有时间在自己的环境里亲自跑一遍加深理解.
两个变量互换
两个变量可以通过这种方式互相互换着赋值
- a = 5
- b = 10
- a, b = b, a
- print(a) # 10
- print(b) # 5
- # 这个看起来不是函数, 但是这种用法在函数中常用
检查是不是偶数
这个功能主要展示的不是快速判断是不是偶数, 而是 bool 判断的用法. 因为 10 可以被 2 整除, 所以余数为 0, 因此它是 ==0 的, 如果换成 `is_even(3)` 那就返回 False 了.
- def is_even(num):
- return num % 2 == 0
- is_even(10) # True
分割一个字符串为一个列表
这个案例使用换行符分割的, 实际应用中, 随机应变.
- def split_lines(s):
- return s.split('\n')
- split_lines('50\n python\n snippets')
- # ['50', 'python', 'snippets']
查找对象使用内存的大小
这个例子中, 调用了 sys 的看内存占用情况函数. 数字 5 占了 28 内存空间大小, 我把这个数字加到 9999 返回依然是 28
- import sys
- print(sys.getsizeof(5)) # 28
- print(sys.getsizeof("Python")) # 55
翻转字符串
这个案例告诉我们字符串的翻转用法, 相应的简单字符串可以翻转, 以后的图片 \ 音频 \ 视频, 一样可以翻转. 如果你在一个函数里用这个功能, 可以解决某些场景里的问题.
- language = "sumer-minus" # SUMER 是我公众号, minus 是我一个网名
- reversed_language = language[::-1]
- print(reversed_language) # sunim-remus
打印字符串 x 遍的小函数
从这里提取两个概念: 1 如何打印 n 遍, 理解函数调用
- def repeat(string, n):
- return (string * n)
- a=repeat('oop!',10)
- print(a)
- >>>oop!oop!oop!oop!oop!oop!oop!oop!oop!oop!
检查一个字符串是否与他的翻转相同
这个小代码把字符串翻转, 和 bool 又一次加深理解
- def palindrome(string):
- return string == string[::-1]
- print(palindrome('python')) # False
把一个列表拼装成字符串
用到了列表 join 方法, 数据分析中可能用的多的是 pandas 的 DataFrame 格式的矩阵, 张量, 但一维这些东西一样会遇到使用.
- strings = ['老虎', '老鼠', '蟑螂']
- print('kill'.join(strings))
- # 老虎 kill 老鼠 kill 蟑螂
将两个列表删除重复项并合并
如何将两个列表合并并扣除其中的重复项呢? 可以看看这个方法, 看起来是不是挺 "卑鄙" 的. 挖 python 墙角感觉, 但更好的方法还确实没想出来. 实际分析中去重可能不多, 但统计众数比较多, 如果是 string, 列表, 如何统计重复内容数量, 思路类似.
- def union(a,b):
- return list(set(a + b))
- union([1, 2, 3, 4, 5], [6, 2, 8, 1, 4])
- # 答案:[1,2,3,4,5,6,8]
将列表去重
- def unique_elements(numbers):
- return list(set(numbers))
- unique_elements([1, 2, 3, 2, 4])
- # 答案:[1, 2, 3, 4]
找到一组数字的均值
虽然有 mean 函数, 但比如你想自己算依稀的东西用到 mean 的时候, 你可以自己造个, 也就两行而已.
- def average(*args):
- return sum(args, 0.0) / len(args)
- average(5, 8, 2)
- # 5.0
检查一个数组是不是都是唯一的数值
- def unique(list):
- if len(list)==len(set(list)):
- print("所有数据都是唯一的")
- else:
- print("并不唯一")
- unique([1,2,3,4,5])
- # 所有数据都是唯一的
找到列表频率最大的数据
- def most_frequent(list):
- return max(set(list), key = list.count)
- numbers = [1, 2, 3, 2, 4, 3, 1, 3]
- most_frequent(numbers)
- # 3
角度变弧度
π在 math 库中是有定义的, 就叫做 math.pi
- import math
- def degrees_to_radians(deg):
- return (deg * math.pi) / 180.0
- degrees_to_radians(90)
- # 1.5707963267948966
打印运行计算花费时间
这个时间跟电脑速度有关
- import time
- start_time = time.time()
- a,b = 5,10 #随便一个过程
- c = a+b #随便一个过程
- end_time = time.time()
- time_taken = (end_time- start_time)*(10**6)
- print("运行这个耗费微秒数为:", time_taken)
- # 运行这个耗费微秒数为: 2.1457672119140625
找到一组数的最大公因数
借助工具 functools
- from functools import reduce
- import math
- def gcd(numbers):
- return reduce(math.gcd, numbers)
- gcd([24,108,90])
- # 6
使用 lambda 公式
- x = lambda a, b, c : a + b + c
- print(x(5, 10, 20))
- # 35
- # 或者也可以这样
- def x(a, b, c):
- return a + b + c
- print(x(5, 10, 30))
- # 35
使用 map 函数
对一个列表每一个元素都进行操作的话, 可以用 map 函数, 下边是个小案例
- def multiply(n):
- return n*n
- list1 =[1, 2, 3]
- result = list(map(multiply, list1))
- print(result)
- # [1, 4, 9]
使用过滤函数 - filter
- arr = [1, 2, 3, 4, 5]
- def Even(x):
- return list(filter(lambda x: x % 2 == 0, arr))
- Even(arr)
- # [2, 4]
列表连续操作
- numbers = [1, 2, 3]
- def squares(nums):
- return [number**2 for number in nums]
- squares(numbers)
- # [1, 4, 9]
切片操作
切片用于从给定序列中提取元素的连续序列或子序列. 以下函数用于合并两个切片操作的结果. 首先, 我们将列表从索引 d 切到末尾, 然后从开始切成索引 d.
- def rotate(arr, d):
- return arr[d:] + arr[:d]
- if __name__ == '__main__':
- arr = [1, 2, 3, 4, 5]
- arr = rotate(arr, 2)
- print (arr)
- # 结果:[3, 4, 5, 1, 2]
使用链功能
最后的代码段用于从一行开始调用多个函数并评估结果.
- def add(a, b):
- return a + b
- def subtract(a, b):
- return a - b
- a, b = 5, 10
- print((subtract if a> b else add)(a, b)) # 15
- print((subtract if a < b else add)(a, b)) # -5
希望这 22 个函数构造思路能让大家有一些的进步收获!
觉得有用, 点个在看呗!
来源: http://www.tuicool.com/articles/2aeuqua