",比较容易搞清楚,避免代码里的“坏味道",离好的代码就不远了,坏味道一二三及推荐做法: 代码重复 函数太长 如果太长(一般不宜超过200行,但不绝对),你自己都不太容易读懂,请不要犹豫,拆成小函数吧。...笔者刚毕业,参与一个大型复杂的金融软件,核心业务类,函数1000行算小case,5000多行的不在少数,我的内心是哇凉哇凉的,还好大致逻辑比较清晰 类太大 一般不宜操过1000行,同样不绝对,jdk源码过千行的不少嘛...还是那个大型复杂的金融软件,核心的几个Algo C++文件,2万到3万行,我的心在滴血 数据泥团 即很多地方有相同的三四项,两个类中有相同的字段、许多函数签名中有相同的参数。...把这些应该捆绑在一起的数据项,弄到一个新的类里吧。这样,函数参数列表会变短不少 函数参数列表太长 工作中有7个参数的函数调用,搞清楚每个参数的业务含意,和顺序有点头晕。...TRUE : FALSE); } 静态工厂方法,不必在每次调用时都创建一个新的对象;而且相较于构造器,它有名称,便于阅读和理解;同时可以返回原类型的任意子类型;也可以根据参数不同,返回不同的类对象,如EnumSet
函数的两个参数分别是将要进行排序的子数组的下标:l是较低的下标,而u是较高的下标。函数调用swap(i,j)将会交换x[i]与x[j]这两个元素。...如果重复用n来运行程序,并且用统计的方法来分析结果,我们将得到Quicksort在对n个元素进行排序时平均使用了1.4 nlgn次的比较。 在理解程序的行为上,这是一种不错的方法。...现在,这个新程序的运行时间与n成正比,并且相对于示例3-3需要的存储空间与n成正比来说,现在所需的存储空间缩减为递归堆栈的大小,即存储空间的平均大小与lgn成正比。...我们在简化程序时经常要发出这样的疑问,“我们真正要解决的问题是什么?”或者是,“有没有更好的函数来解决这个问题?”...* 只有在不仅没有任何功能可以添加,而且也没有任何功能可以删除的情况下,设计师才能够认为自己的工作已臻完美。 * 有时候,在软件中根本就不存在最漂亮的代码,最漂亮的函数,或者最漂亮的程序。
此时,我们更希望有一个东西,能够把2个变量以及变量之间的相加行为合并成一个东西,这就是函数: 行1:def 函数名字(参数1,参数2): 这定义一个函数 行2:函数中的行为是"把 a 和 b 相加,并把结果返回...这里的括号非常重要 现在,mysum 已经是一个代表2个数值相加这一行为的函数,在任何地方都可以调用他得到结果: 之前我特别强调把2个变量以及变量之间的相加行为合并成一个东西 可以看到,虽然 mysum...: 这似乎是一个办法,但是调用的时候代码很丑(看看上面的行8) 以前的调用 mysum(1,2) 多漂亮呀 ---- 有没有一个办法,能让 Python 帮我收集 mysum 传入的参数,放入一个列表中...看看这个机制的表达: 行1:在参数 nums 前面添加一个 星号(*),表示调用时,可以传入任意个参数,这些参数全收集到一个列表参数中 现在,mysum 这个自定义函数真不错。...你心血来潮,尝试之前那个丑陋的调用: 竟然报错了 这似乎没所谓,但是很多时候我们拿着一个列表的数值希望调用我们的 mysum 函数,并期望他直接给我正确的结果 ---- 解包 有没有一种操作,能自动把一个列表中的元素拆解成一个个的元素
代码重复 函数太长 如果太长(一般不宜超过200行,但不绝对),你自己都不太容易读懂,请不要犹豫,拆成小函数吧。...笔者刚毕业,参与一个大型复杂的金融软件,核心业务类,函数1000行算小case,5000多行的不在少数,我的内心是哇凉哇凉的,还好大致逻辑比较清晰 类太大 一般不宜超过1000行,同样不绝对,jdk源码过千行的不少嘛...还是那个大型复杂的金融软件,核心的几个Algo C++文件,2万到3万行,我的心在滴血 数据泥团 即很多地方有相同的三四项、两个类中有相同的字段、许多函数签名中有相同的参数。...把这些应该捆绑在一起的数据项,弄到一个新的类里吧。这样,函数参数列表会变短不少,简单化了 函数参数列表太长 工作中有7个参数的函数调用,搞清楚每个参数的业务含意,和顺序有点头晕。...TRUE : FALSE); } 静态工厂方法,不必在每次调用时都创建一个新的对象;而且相较于构造器,它有名称便于阅读和理解;同时可以返回原类型的任意子类型;也可以根据参数不同,返回不同的类对象
这里没有简单的方法或窍门。 这里有一些你可以掌握的编写整洁美丽代码的方法。...“名称说明什么” Kendrick Lamar很好的解释道: “如果我要讲一个真实的故事,我会从我的命名开始” 在软件中名称到处都是。我们命名函数、类、参数、包以及其他。...在任何编程语言中,函数通常是系统中的第一行,编写好的函数是写好代码的实质所在。...该技巧可以使得代码更容易阅读理解消化。除此之外,我们也要使得函数内的语句处于同一个抽象程度。 在同一个函数中混合不同层次的抽象,会使得其令人迷惑,并且不利于管理。...因为这个原因,写代码的时候从 try-catch-finally语句写起是个好的实践。这可以帮助你确定可以预期到的用户代码,不管代码在 try有没有报错。
这里没有简单的方法或窍门。 这里有一些你可以掌握的编写整洁美丽代码的方法。...名称说明什么 Kendrick Lamar很好的解释道: 如果我要讲一个真实的故事,我会从我的命名开始 在软件中名称到处都是。我们命名函数、类、参数、包以及其他。...函数是语言的动词,而类是名词。在任何编程语言中,函数通常是系统中的第一行,编写好的函数是写好代码的实质所在。...该技巧可以使得代码更容易阅读理解消化。除此之外,我们也要使得函数内的语句处于同一个抽象程度。 在同一个函数中混合不同层次的抽象,会使得其令人迷惑,并且不利于管理。...因为这个原因,写代码的时候从 try-catch-finally语句写起是个好的实践。这可以帮助你确定可以预期到的用户代码,不管代码在 try有没有报错。
这里没有简单的方法或窍门。 这里有一些你可以掌握的编写整洁美丽代码的方法。...“名称说明什么” Kendrick Lamar很好的解释道: ”如果我要讲一个真实的故事,我会从我的命名开始“ 在软件中名称到处都是。我们命名函数、类、参数、包以及其他。...在任何编程语言中,函数通常是系统中的第一行,编写好的函数是写好代码的实质所在。...该技巧可以使得代码更容易阅读理解消化。除此之外,我们也要使得函数内的语句处于同一个抽象程度。 在同一个函数中混合不同层次的抽象,会使得其令人迷惑,并且不利于管理。...因为这个原因,写代码的时候从 try-catch-finally语句写起是个好的实践。这可以帮助你确定可以预期到的用户代码,不管代码在 try有没有报错。
大家好,我是一行 今天给大家推荐一个非常精美的终端工具 - Rich Rich 是一个 Python 库,可以为你在终端中提供富文本和漂亮、精美的格式。...可与新的 Windows 终端一起使用,Windows 的经典终端仅限 8 种颜色。 Rich 还可以与 Jupyter NoteBook 一起使用,而无需其他配置。...Python脚本程序中,你只需导入 rich print 方法,该方法和其他 Python 的自带功能的参数类似。...,请注意,与内置的“打印”功能不同,Rich 会将文字自动换行以适合终端宽度。 有几种方法可以为输出添加自定义颜色和样式。你可以通过添加 style 关键字参数来为整个输出设置样式。..., style="bold red") 输出如下图: 这个范例一次只设置了一行文字的样式。如果想获得更细腻更复杂的样式,Rich 可以渲染一个特殊的标记,其语法类似于 bbcode。
更复杂的操作也能做,我们这里就不讲了,因为我们的这个抖音爬虫用到的 ADB 指令基本也就这些了。a....如果这样都检测不出来,只能说小姐姐藏得太深,或者漂亮的不够明显了 大概思路就是这样,下面我们就来动手完成爬虫吧 动手撸码写爬虫 由于爬虫还是稍微有点大,所以我拆成三个部分来写。...主要包括四个函数: start_my_app 函数,用来启动 抖音 APP。 save_video_met 函数,点击 ”点赞“ 按钮。在检测到漂亮小姐姐之后调用。...(华为 Mate 20 Pro),其他型号手机的同学,可以根据自己手机屏幕的分辨率,对这些参数进行调整。...修改坐标的方法我也大概说一下,在你手机的设置中,找到开发人员选项,然后将指针位置这个打开,然后你就可以看到你点击到屏幕的位置了,顶部也会显示你点击的位置坐标。
可与新的 Windows 终端一起使用,Windows 的经典终端仅限 8 种颜色。 Rich 还可以与 Jupyter NoteBook 一起使用,而无需其他配置。...Python脚本程序中,你只需导入 rich print 方法,该方法和其他 Python 的自带功能的参数类似。...,请注意,与内置的“打印”功能不同,Rich 会将文字自动换行以适合终端宽度。 有几种方法可以为输出添加自定义颜色和样式。你可以通过添加 style 关键字参数来为整个输出设置样式。..., style="bold red") 输出如下图: 这个范例一次只设置了一行文字的样式。如果想获得更细腻更复杂的样式,Rich 可以渲染一个特殊的标记,其语法类似于 bbcode。...,该方法具有与 print() 类似的界面,除此之外,还能显示当前时间以及被调用的文件和行。
可与新的 Windows 终端一起使用,Windows 的经典终端仅限 8 种颜色。 Rich 还可以与 Jupyter NoteBook 一起使用,而无需其他配置。...Python脚本程序中,你只需导入 rich print 方法,该方法和其他 Python 的自带功能的参数类似。...,请注意,与内置的“打印”功能不同,Rich 会将文字自动换行以适合终端宽度。 有几种方法可以为输出添加自定义颜色和样式。你可以通过添加 style 关键字参数来为整个输出设置样式。..., style="bold red") 输出如下图: 这个范例一次只设置了一行文字的样式。如果想获得更细腻更复杂的样式,Rich 可以渲染一个特殊的标记,其语法类似于 bbcode。...") # 5.Console 控制台记录 Console 对象具有一个 log() 方法,该方法具有与 print() 类似的界面,除此之外,还能显示当前时间以及被调用的文件和行。
Python脚本程序中,你只需导入 rich print 方法,该方法和其他 Python 的自带功能的参数类似。...,请注意,与内置的“打印”功能不同,Rich 会将文字自动换行以适合终端宽度。 有几种方法可以为输出添加自定义颜色和样式。你可以通过添加 style 关键字参数来为整个输出设置样式。...这个范例一次只设置了一行文字的样式。如果想获得更细腻更复杂的样式,Rich 可以渲染一个特殊的标记,其语法类似于 bbcode。...注意其中的 log_locals 参数会输出一个表格,该表格包含调用 log 方法的局部变量。 log 方法既可用于将长时间运行应用程序(例如服务器)的日志记录到终端,也可用于辅助调试。...# 12.错误回溯(traceback) Rich 可以渲染漂亮的错误回溯日志,比标准的 Python 回溯更容易阅读,并能显示更多代码。
函数是许多现代浏览器命令行API中的一个部分,它等价于document.querySelectorAll,你可以将一个CSS选择器作为这个函数的参数,然后你就能够获得当前页面中所有匹配这个CSS选择器的元素列表...更多关于 当然,除了使用$$函数之外,我们还有一种更简单的方法,document.all,虽然这并不是一种很规范的使用方法,但是它几乎在每一个浏览器中都能运行成功。...在JavaScript中,有好几个类似于数组但是并不是数组的对象,除了前面的NodeLists,还有函数的参数集合arguments,在这里我们可以使用call或apply函数将函数的方法运用到这些对象上...这个函数可以接受一个参数,如果参数缺省,默认为十进制,但是你完全可以使用别的数组: (30).toString(); // "30" (30).toString(10); // "30" (30).toString...总结 现在,你已经完全理解了前面的这一行代码中的各个部分。作为一个程序员,我们应该在完成工作之后多问自己几遍为什么,还有没有更好更简洁的方法。
Excel可以生成漂亮的图形,为什么还要使用Python呢? 我们正处于互联网时代。一切都是在线的——互联网不可避免地是最大的公共数据库。...,为了让本文更容易理解,我们只看一下全球确认的数字。...df = df.iloc[:,4:] global_num = df.sum() 图2 现在我们有了一个一维表:日期和相应日期的确认新冠病毒病例。我们将用它来绘制一段时间内的全球新冠病毒病例。...pandas提供了一种直接从数据框架绘制图形的便捷方法,我们只需要使用dataframe.plot()。但是必须记住,在绘制后要让matplotlib显示图形,就需要使用plt.show()。...后续文章中,我们会讨论如何制作更漂亮的图形。 注:本文学习整理自pythoninoffice.com。 欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。
我们可以简单的用这种方法创建一个集合: >>> my_set = {1, 2, 1, 2, 3, 4} >>> my_set set([1, 2, 3, 4]) 而不需要使用内置函数set()。...对于大多数程序员来说,数一个东西是一项很常见的任务,而且在大多数情况下并不是很有挑战性的事情——这里有几种方法能更简单的完成这种任务。...使用python内置的json处理,可以使JSON串具有一定的可读性,但当遇到大型数据时,它表现成一个很长的、连续的一行时,人的肉眼就很难观看了。...为了能让JSON数据表现的更友好,我们可以使用indent参数来输出漂亮的JSON。...模块,也可以让其它任何东西打印输出的更漂亮。
你可以网上搜索"用户消费分析 pandas" 查阅其他同类文章作为对比学习 ---- 数据背景 案例数据为 CDNow 平台上某段时间的订单数据,定义加载数据的函数: 行3:数据源是文本文件,每列数据由多个空格分隔...7万行的数据 下方红框信息,表明4个列没有缺失数据 绿色框,看到 user_id 与 date 的类型不对 转换类型的逻辑我写在加载数据的函数中: 行6:使用 pd.to_datetime 把非日期类型的字段转为日期...= pd.Grouper(key='date', freq='M') 现在统计销售额趋势是这样子: 不过,我们注意到,统计后的结果列名不受我们控制,因此,在 pandas 0.25版本追加了一个新的聚合方式...对象,其中的参数分别是列名与统计方法 调用如下: 注意此时我们需要解包操作,把其中定义的字典解开为参数传入 ---- 现在可以一次性定义需要用到的指标度量: 其次把指标计算也定义出来: 有些计算如果觉得不希望每次统计都重新计算..."每月的销售额": "每月消费人数": "每月客单价": 行3:多个度量,只需要分别传入即可 "每月平均订单单价": 本次涉及的并非一些 pandas 的方法,而是使用 pandas 的一种模式
一 初识函数 大家都有没有玩过陌陌,探探这种软件?...() 时,才会执行此函数,如果没有这条指令,函数里面即使有10万行代码也是不执行的。...python提出了一种叫做关键字参数. 我们不需要记住每个参数的位置....也就是说在调用函数的时候即可以给出位置参数, 也可以指定关键字参数. 混合参数一定要记住:关键字参数一定在位置参数后面。...print("ok 走起") date('女','25~30','唱歌') 2, 默认值参数 在函数声明的时候, 就可以给出函数参数的默认值.
找出两个输出可能不是很困难,但是如果有五个以上的不同输出呢?尝试查找与输出相关的代码可能会很耗时。 当然你可以在打印语句中添加文本,使其更容易理解: 输出结果。...通过使用icecream,我们不仅可以看到函数输出,还可以看到函数及其参数! 02. 检查执行情况 如果你想要找到执行代码的位置,可以通过执行如下所示的操作,来查找执行了哪个语句。 输出结果。...使用icecream则无需多余的文本信息,就可以轻松地完成上述的操作。 输出结果如下。 从输出结果看,函数hello中的第5行的代码已被执行,而第7行的代码未执行。 03....删除Icecream代码 最后你可以将icecream仅用于调试,而将print用于其他目的(例如漂亮的打印)。 输出结果。...由于你可以区分调试打印和漂亮打印,因此搜索和删除所有ic调试语句非常容易。 删除所有调试代码后,你的Python代码就整洁了。
领取专属 10元无门槛券
手把手带您无忧上云