没有树的地方是沙漠,没有你的地方是寂寞,既然来了,就请把我关注(∩•̀ω•́)⊃-*⋆

问题来了:

如果你经常用python做一些小的项目玩,或者用python做一些爬虫,又或者你去一些网站刷题,那么必将面对一个问题——写函数。

“写函数”也就是自己写一个算法,用来实现一些功能。比如最简单的给电脑两个参数,让他计算这两个参数的关系。但是函数写作也有写的厉害的和写的怂的。Python要求的是代码简洁。所以之前我在这个网站刷题的时候就很受打击。网址如下。一个牛逼的刷题网站​www.codewars.com

打击点在于每道题他会要求一个场景,让你写一个函数做出来。我写一个函数实现这个功能,最终提交的最精简版也可能长达三行,但是里边的大神们(也就是全网公认那道题他拿第一名的大神)几乎都是一行搞定。

比如这个题目:您住在笛卡尔市,那里的所有道路都以完美的网格布局。 您提前十分钟到达预约地点,所以您决定趁机散散步。 恰好该城市在其手机app上为其市民提供了一个“步行生成”应用程序-每次您按下按钮时,都会向您发送一串由一个字母组成的字符串,代表行走的方向(例如[‘n’,‘s’,‘w’, ‘e’]),收到后您就按照NSWE方向依次走下去。

这里有个前提知识是您始终只能在一个方向上走一个街区距离,而且穿越一个城市街区需要一分钟,因此创建一个函数,应用程序给您提供步行信息,如果会花费您正好十分钟,并且能走回原点,则返回true(您不想到早了,也不想迟到),否则返回false。

这道题我的答案是:(首先判断是不是10个字段代表的10分钟,其次能回到原点必定是对应方向的个数要相同,两次否定筛选后,返回True。

# 鄙人代码

def isValidWalk(walk):

if len(walk) != 10 : return False

else:

if walk.count('w') != walk.count('e') or walk.count('s')!= walk.count('n') :return False

else : return True

第一名大神的:提示-他的思路跟我完全相反,直接要求等于10,并且对应相同相等。

# 第一名大神代码:

def isValidWalk(walk):

return len(walk) == 10 and walk.count('n') == walk.count('s') and walk.count('e') == walk.count('w')

ok,如果你懂代码,上边的非常简单,也好理解。而我刚刚洋洋洒洒写了这么多就是想告诉大家,练习写函数是很重要的,因为在数据处理过程中可能需要一些函数来对数据进行归类,或者依据一些数据给某行贴上‘标签’,这些都可以用函数来搞定。

正餐

刻意练习告诉我们——>万事万物你想掌握好,那就需要付出时间去练习,下边献上22个函数构造练习,如果愿意希望你逐行读完,并在自己的环境里亲自跑一遍加深理解。插播广告:交流加wx: rovesoul

1. 两个变量互换

两个变量可以通过这种方式互相互换着赋值

a = 5

b = 10

a, b = b, a

print(a) # 10

print(b) # 5

# 这个看起来不是函数,但是这种用法在函数中常用

2. 检查是不是偶数

这个功能主要展示的不是快速判断是不是偶数,而是bool判断的用法.因为10可以被2整除,所以余数为0,因此它是==0的,如果换成`is_even(3)`那就返回False了.

def is_even(num):

return num % 2 == 0

is_even(10) # True

3. 分割一个字符串为一个列表

这个案例使用换行符分割的,实际应用中,随机应变.

def split_lines(s):

return s.split('\n')

split_lines('50\n python\n snippets')

# ['50', ' python', ' snippets']

4. 查找对象使用内存的大小

这个例子中,调用了sys的看内存占用情况函数。数字5占了28内存空间大小,我把这个数字加到9999返回依然是28

import sys

print(sys.getsizeof(5)) # 28

print(sys.getsizeof("Python")) # 55

5. 翻转字符串

这个案例告诉我们字符串的翻转用法,相应的简单字符串可以翻转,以后的图片\音频\视频,一样可以翻转.如果你在一个函数里用这个功能,可以解决某些场景里的问题。

language = "sumer-minus" # SUMER是我公众号,minus是我一个网名

reversed_language = language[::-1]

print(reversed_language) # sunim-remus

6. 打印字符串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!

7. 检查一个字符串是否与他的翻转相同

这个小代码把字符串翻转,和bool又一次加深理解

def palindrome(string):

return string == string[::-1]

print(palindrome('python')) # False

8. 把一个列表拼装成字符串

用到了列表join方法,数据分析中可能用的多的是pandas的DataFrame格式的矩阵、张量,但一维这些东西一样会遇到使用。

strings = ['老虎', '老鼠', '蟑螂']

print('kill'.join(strings))

# 老虎kill老鼠kill蟑螂

9. 将两个列表删除重复项并合并

如何将两个列表合并并扣除其中的重复项呢?可以看看这个方法,看起来是不是挺“卑鄙”的。挖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]

10. 将列表去重

def unique_elements(numbers):

return list(set(numbers))

unique_elements([1, 2, 3, 2, 4])

# 答案:[1, 2, 3, 4]

11. 找到一组数字的均值

虽然有mean函数,但比如你想自己算依稀的东西用到mean的时候,你可以自己造个,也就两行而已。

def average(*args):

return sum(args, 0.0) / len(args)

average(5, 8, 2)

# 5.0

12. 检查一个数组是不是都是唯一的数值

def unique(list):

if len(list)==len(set(list)):

print("所有数据都是唯一的")

else:

print("并不唯一")

unique([1,2,3,4,5])

# 所有数据都是唯一的

13. 找到列表频率最大的数据

def most_frequent(list):

return max(set(list), key = list.count)

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

most_frequent(numbers)

# 3

14.角度变弧度

π在math 库中是有定义的,就叫做math.pi

import math

def degrees_to_radians(deg):

return (deg * math.pi) / 180.0

degrees_to_radians(90)

# 1.5707963267948966

15. 打印运行计算花费时间

这个时间跟电脑速度有关

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

16. 找到一组数的最大公因数

借助工具functools

from functools import reduce

import math

def gcd(numbers):

return reduce(math.gcd, numbers)

gcd([24,108,90])

# 6

17. 使用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

18. 使用map函数

对一个列表每一个元素都进行操作的话,可以用map函数,下边是个小案例

def multiply(n):

return n*n

list1 =[1, 2, 3]

result = list(map(multiply, list1))

print(result)

# [1, 4, 9]

19. 使用过滤函数-filter

arr = [1, 2, 3, 4, 5]

def Even(x):

return list(filter(lambda x: x % 2 == 0, arr))

Even(arr)

# [2, 4]

20. 列表连续操作

numbers = [1, 2, 3]

def squares(nums):

return [number**2 for number in nums]

squares(numbers)

# [1, 4, 9]

21. 切片操作

切片用于从给定序列中提取元素的连续序列或子序列。 以下函数用于合并两个切片操作的结果。 首先,我们将列表从索引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]

22. 使用链功能

最后的代码段用于从一行开始调用多个函数并评估结果。

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

You Need More!

写了这么多真挺累的,但累的值,因为它们真的能解决问题。这篇22个函数构造思路如果使你有1%的进步收获,那就麻烦关注我,点赞我!!!!

此外除了编程、数据分析,如果你对理财、演讲啥的感兴趣欢迎关注公众号:SUMER

关注后发关键字 Python 将免费送你一些电子书

python 构造函数里的同名变量_Python22个构造函数法-助力数据挖掘与分析相关推荐

  1. c++ time函数_Python22个构造函数法助力数据挖掘与分析

    点击上方[牵引小哥讲Python],关注回复[资源]领取学习资源! 如果你经常用python做一些小的项目玩,或者用python做一些爬虫,又或者你去一些网站刷题,那么必将面对一个问题--写函数. & ...

  2. ngrx注入到应用类构造函数里的store变量

    这个类型为Store<fromExample.State>的变量: 本质是个Observable: store的source字段的_value里,包含了两个state的初始值: 更多Jer ...

  3. python数据可视化案例2017年6省gdp_吴裕雄 数据挖掘与分析案例实战(5)——python数据可视化...

    # 饼图的绘制 # 导入第三方模块 import matplotlib import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']= ...

  4. python类变量与__init__声明变量的区别

    类变量:可在类的所有实例之间共享的变量 实例类对象:类的实例是调用类对象来创建的.如:par = Parent(),par就是类Parent的一个实例类对象. 实例变量(成员变量):同一个类对象可以创 ...

  5. python 特性和方法同名_Python语言特性的梳理

    对python的语言特性,多线程机制,以及性能局限的梳理 运行环境 由于Python不同版本,尤其是Python2与Pyhton3之间差异明显,所以运行不同项目时往往需要不同版本的运行环境,这种情况下 ...

  6. 在python中 函数赋值给变量时,需要注意的几个事项

    变量赋值是我们在日常开发中经常会遇到的一个问题,本文主要给大家介绍的是关于python将函数赋值给变量时需要注意的一些问题,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 见过两种函数 ...

  7. python中将函数赋值给变量时需要注意的一些问题

    变量赋值是我们在日常开发中经常会遇到的一个问题,本文主要给大家介绍的是关于python将函数赋值给变量时需要注意的一些问题,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 见过两种函数 ...

  8. 在Linux里设置环境变量的方法(export PATH)--待修改

    2019独角兽企业重金招聘Python工程师标准>>> 又可参见:http://bbs.csdn.net/topics/80391559 在Linux里设置环境变量的方法(expor ...

  9. python语言里数字包括_4.1Python语言中的数字、字符串数据类型讲解

    标准数据类型 Python3 中有六个标准的数据类型: int bool float complex(复数) Number(数字) String(字符串) List(列表) Tuple(元组) Set ...

最新文章

  1. 再加力度!浙江抢人!博士补120万,硕士补70万,本科补20万
  2. OpenCV 中值滤波
  3. 什么是cname a记录
  4. Dev C++,一个好玩的猜数字游戏
  5. 失败创业者的告白:初创团队应有一位绝对领导者
  6. web开发的一些材料
  7. byte数组存的是什么_字节跳动为什么有字节2个字,因为程序的真谛:字节
  8. PADS 管脚编号全部修改方式
  9. Juniper SSG20 Config DHCP Server
  10. Base64 | Base32 | Base16编码和解码小结
  11. 论文笔记Revisiting the Sibling Head in Object Detector
  12. 工业平板电脑选择需要注意的地方
  13. itwangyang - 再次继续卷起来-20 个 JS 封装工具函数
  14. C 碎片八 结构体amp;枚举amp;联合
  15. RabbitMQ系列教程一:消息中间件的诸侯征战史
  16. 休谟、同情、道德、智能
  17. 采坑阿里云 kex_exchange_identification: read: Connection reset by peer
  18. Hadoop大数据从入门到精通-任亮-专题视频课程
  19. 林铭:10.20今日黄金走势分析操作布局美元止损下跌支撑金价
  20. 神庙逃亡2、愤怒的小鸟,1.8万款APP被指违反谷歌策略跟踪用户

热门文章

  1. 【区块链与密码学】第9-7讲:群签名在区块链中的应用 I
  2. 【智能制造】智能制造技术与数字化工厂应用!
  3. 二进制与十进制间的转化
  4. Windows的NSIS ERROR
  5. 计算机系技能比赛黑板报,关于技能比武主题的黑板报
  6. Linux多线程编程之pthread (多线程编程) --- (高级)---原作优秀
  7. 使用Java定义一个动物类
  8. SQL学习笔记(三): 视图与一些复杂查询(虽复杂但常用)
  9. HBuilderX 最新安装使用教程,附详细图解,持续更新
  10. Java程序猿必学第十一篇——接口