首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python 为什么没有 main 函数?为什么我不推荐写 main 函数?

本期“Python 为什么”栏目来聊聊 Python 为什么没有 main 函数? 在开始正题之前,先要来回答这两个问题:所谓的 “main 函数”是指什么?...为什么有些编程语言需要强制写一个 main 函数?...这些语言是编译型语言,需要把代码编译成可执行的二进制文件,为了让操作系统/启动器找到程序的起点,所以要约定这一个函数。简单地说,就是在一大堆代码里,需要定义一个显著的可用于执行的开头。...我每次看到这种不假思索的累赘代码,就觉得难受。为什么要写那行 if 语句呢?可能的话,应该拆分 main 函数,甚至不必封装成一个函数啊! 我个人总结出以下的经验: 打破惯性思维,写出地道的代码。...小结:本文首先解释了什么是 main 入口函数,以及为什么某些语言会强制要求写 main 函数;接着,解释了为什么 Python 不需要写 main 函数;最后则是针对某些人存在的惯性误区,分享了我个人的四点编程经验

2.5K31
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JavaScript面试题补充(6---10)

    因此,当调用setTimeout()函数时,即使延迟的时间被设置为0,提供的回调也会被排队。回调会呆在队列中,直到指定的时间用完后,引擎开始执行动作(如果它在当前不执行其他的动作)。...有了这些认识,理解输出结果为“1”就容易了,因为它是函数的第一句并且没有使用setTimeout()函数来延迟。接着输出“4”,因为它是没有被延迟的数字,也没有进行排队。...这就解释了为什么“3”在“2”之前。 问题10:算法 写一个isPrime()函数,当其为质数时返回true,否则返回false。 答案 我认为这是面试中最常见的问题之一。...如果面试官没有明确地告诉你,你应该询问他是否需要做输入检查,还是不进行检查直接写函数。严格上说,应该对函数的输入进行检查。 第二点要记住:负数不是质数。同样的,1和0也不是,因此,首先测试这些数字。...我希望你愉悦地测试你的能力。万一你不知道所有的答案,不要担心:没有学习和经验不能解决的问题。 如果你在面试中被问到了其他有趣的问题,不要犹豫马上来和我们分享吧。这会帮助到很多的开发者。

    81230

    记录一次接口离奇的接口跨域问题(Vue)

    错误复现 接口方 可以看到已经做了跨域处理 代码调用 vue调用,似乎没有任何问题 浏览器报错 Access to XMLHttpRequest at ‘https://api.0po.cn...我 我懵逼了,以往常经验,接口加了解决跨域的,而且没指定域名,用*代表允许所有域名调用,为什么还报呢?...于是开始了,百度 结果呢: 加了一大把,都不行,有的人还让修改Nginx反代,我修改你个****,反代你个****,让动Nginx的人,都不知道以后出问题,其它网站的后果是什么 无语了。。。...当我看到调取Redis的接口代码加了跨域,浏览器没拦,就接口的php拦了 我…更无语了 ---- 观察问题 当然是,动用我前端观察能力 我日,接口怎么301跳转了,我也没重定向啊 手动打开,似乎没有什么问题...(问题就出在这里) 于是 看了看前端调redis的接口写法,似乎知道问题了 解决 web的默认文件是index.php,对于默认文件,可以不写文件名+后缀 当然也可以指定,这里不做多余科普

    23530

    嵌入式linux下如何尽快播放开机音乐

    /zqbMusic kaiji.wav 那么就在五秒多的时候,开始播放,播放完毕六秒多,打印出了"/ #",这样就比较不好了,我“/ #”之后还要启动其他应用程序呢,放音乐直接延迟了其他事情一秒多。...这么做了之后,好一些了,五秒多就可以听到声音了,打印“/ #”的时间也在五秒多(比原来慢一些,毕竟多跑了个线程抢资源) 这个时候,忍不住就要想,能不能再往前提,我干脆提到跟init并行,不改文件系统的话.../zqbMusic kaiji.wav & exec init 搞定,丢到文件系统,烧到板子启动,结果报错了,是一个什么permission denied,具体当时没存下来,大概就是说我没有权限执行...init(实际上是busybox) 尝试了chmod 各种加权限,还是报错,暂时不知道为什么,算了干脆用C试试 于是用C写个很简单的程序,fork一个子进程,子进程去execlp调用zqbMusic,父进程则...再提前就要到内核里面去了,唔,在驱动初始化完毕之后,补一个initcall,就用来放音乐,理论上似乎也是可以的,就是有点别扭。 再提前?

    1.7K10

    记一次接口慢查排查

    排查过程 3.1 直奔主题 从全链路追踪系统给出的链路信息来看,问题的原因似乎很明显,就是 selectList 和 prepareStatement 之间存在着长耗时的操作。...图5:CPU 使用率折线图 询问了业务同学,这个点没有定时任务,QPS 与以往相似,没有什么异常。目前不知道 CPU 为什么会突然上升这么多,这个信息暂时无法提供有效的帮助,先放着。...模型转换完毕后,紧接着是写缓存,写缓存又涉及序列化。...加之两秒内出现了二十多次调用,加剧了内存消耗,这应该能解释为什么 GC 次数会突然上升这么多。下面还有几个问题,我用 FAQ 的方式解答: Q:那 GC 耗时长如何解释呢?...为了较为准确的模拟当时的接口调用情况,我写了一个可以控制 QPS 和请求总数的验证逻辑。

    1.7K10

    关于Windows Terminal无法在Win+X菜单和Win+R中通过wt.exe打开的问题

    0byte 的 exe,而不是.lnk,不知道为什么… 总之,最终实际运行的还是位于 \WindowsApps\Microsoft.WindowsTerminal_1.12.10983.0_x64__...关于问题 1:我的猜想是系统环境变量 Path 中对于这两个路径的定义, \WindowsApps\Microsoft.WindowsTerminal_1.12.10983.0_x64__8wekyb3d8bbwe...2:我的猜想是所处位置权限不同或调用方不同,导致实际运行 wt.exe 时,wt.exe 内部调用 syscall 被 Permission Denied(不知道算不算是 bug?)...,不然特殊权限很难恢复,实测在我的电脑上无效。...替代方案:Github 老哥写的 powershell 脚本(没尝试过,可用性未知) 参考: Github Issue 7081 Github Issue 7974 如何将 WindowsApps

    4.6K52

    Kotlin 和 Checked ExceptionKotlin 和 Checked Exception

    我发现国内的技术小编们似乎很喜欢把“选择”歪曲成“取代”。...我不明白为什么每当出现一个 JVM 的语言,就有人欢呼雀跃的,希望它会取代 Java,似乎这些人跟 Java 有什么深仇大恨。他们已经为很多新语言热血沸腾过了,不是吗?...在微软写 C# 的时候,我已经深刻体会到了缺少 CE 所带来的困扰。现在我就来讲一下,CE 为什么是很重要的语言特性,然后讲一下为什么 Hejlsberg 对它的批评是站不住脚的。...首先,写 C# 代码时最让我头痛的事情之一,就是 C# 没有 CE。每调用一个函数(不管是标准库函数,第三方库函数,还是队友写的函数,甚至我自己写的函数),我都会疑惑这个函数是否会抛出异常。...注意到了吗,这也就是你写 Java 代码时,能写出的最糟糕的异常处理代码!因为不知道 foo 函数里面会有什么异常出现,所以你的 catch 语句里面也不知道该做什么。

    71820

    宋宝华:在实时操作系统里面随便怎么写代码都能硬实时吗?

    很久没有写技术文章了,做码农难,做养娃的码农更难,趁着娃看动画片的机会,受着王菲童鞋《我和我的祖国》歌唱精神的鼓舞,我要来说几句。 硬实时是什么?...那么,这个时候我们诞生了一个疑问,是不是在RTOS里面随便写代码都能满足硬实时,而在Linux里面无论怎么写代码都满足不了硬实时?我认为这2个问题的答案都是否定的。 Linux为什么不硬实时?...IRQ1唤起的softirq的代码是码农写的,这个码农写多久,鬼都不知道,这显然破坏了实时任务T1得以调度执行的确定性时延。 4....我进内核搜索,发现没有一个体系架构到目前真地使能了支持。 ?...当提到preempt-rt补丁的时候,我必须强调一点,Linux不是一个裸奔的操作系统。Linux的应用都是在用户空间写的一个个进程、线程。

    2.9K41

    2017上海QCon之旅总结(中)

    子系统又可以继续拆分为更小的系统,比如交易系统可以继续拆分为购物车、下单等等。跟写代码拆不多,会将一个系统拆分为各个模块,每个模块之间通过接口交互来协同完成工作。 ?...我个人的理解是Service Mesh变成了基础组件,每个服务器上都会安装,然后是跨语言的,这样就避免的比如写一个RPC框架内嵌到应用中,这样就需要考虑多语言的问题了。...(为什么不采用主从的结构来做呢?)...延迟消息 PhxQueue分享中提到了延迟推,不知道是否和上面说的定时消息是一致的,支持任意级别的延迟,最长40天。...性能 根据PhxQueue给出的测试时结果,延迟在20ms+,这个延迟我认为是不可接受的。 比如电商中的下单业务,可能需要调用商品服务、库存服务、变更DB,之后发送一条消息出去。

    51730

    教程 | 如何通过57行代码复制价值8600万澳元的车牌识别项目

    我也不知道为什么,但是有一天的下午,我突然有了打造一个车载拍照扫描仪原型的想法,它可以自动提醒你一辆车是已被偷或未登记。搞明白了已有的单独组件之后,我在想把它们组装起来的难度有多大。...固定式车牌识别系统 成功标准 在开始之前,我概述了产品设计所需的若干个关键需求。 图像处理必须本地执行 把实时视频流传递到中央处理仓库似乎是解决这一问题的效率最低的方法。...除了数据量的巨大开支,你也将把网络延迟引入到已经相当缓慢的过程中。 尽管中心化的机器学习算法会随着时间变的更精确,我想知道一个本地的设备上的实现是否足够好。...必须使用低质量图像 尽管我没有树莓派摄像头或 USB 网络摄像头,因此我将会使用 dashcam 镜头,它易于获取,是样本数据的理想来源。...8600 万澳元的问题 我并不知道这一笔资金具体包括什么,我也不能对比不在本地训练的开源工具和 pilot BlueNet 系统的性能。

    1.1K60

    反汇编算法介绍和应用——递归下降算法分析

    似乎很难理解。recursive还是有循环和回归的意思,那么recursive descent就可以理解为“不停减少的循环”和“不停减少的回归”。...想想我们的二进制文件在系统中正常运行时是不会出错的,因为CPU总是可以找到真正的指令起始地址,那么我们反汇编算法只要能模拟CPU执行指令就可以得到正确的反汇编结果了。OK!...但是不要退却,没有完美的方案,只有最可以接受的方案。那我们开始研究下怎么修改我们的思路,让我们的算法变得“最令人可以接受”。        ...为什么这么说呢?我们接着以D中的例子为例。...为什么?还记得我在《反汇编算法介绍和应用——线性扫描算法分析》所说的递归下降算法缺陷么?它可能无法覆盖全部代码。

    1.8K10

    为什么 Go 是我最喜欢的编程语言(2017)翻译

    为什么 Go 语言是我最喜欢的编程语言 2017-08-19 发表,上次修改 2020-11-21 我努力尊重每个人的个人喜好,所以我通常会避开关于哪种是最好的编程语言、文本编辑器或操作系统的辩论。...此外,自动格式化在代码审查中是一个巨大的时间节省,因为它消除了以前可以审查代码的整个维度:现在,你可以只让你的持续集成系统验证 gofmt 没有产生差异。...Go 编译器的作者尊重我对低延迟的渴望:编译速度对他们来说很重要,新的优化会被仔细评估权衡,优化是否会降低编译速度。 我的一个朋友以前没有使用过 Go 。...注意事项 当然,没有哪个编程工具是完全没有问题的。鉴于这篇文章解释了为什么 Go 是我最喜欢的编程语言,它的重点是积极的一面。不过,我还是要顺便提一下几个问题。...如果你使用的 Go 包没有提供稳定的API,你可能想使用一个特定的、已知的工作版本。你最好的选择是 dep 工具,在写这篇文章时它还不是语言的一部分。

    98130

    529 的 Rust 培训复盘及视频

    我能理解这些教程的无奈:几乎每本编程语言的入门都不得不假定学习对象没有太多基础,所以只好每个例子尽可能独立,简单,而并不关心其实用性。...博物馆门票:本来是要撰写 RAII 相关的代码,结果发现似乎没有必要(Drop trait 仅仅打印了一下,没做任何和资源释放相关的事情),变成了展示 RAII 相关的代码。...其实泛型写多了就不会感觉太困难,就像写函数一样,大家都是延迟绑定。只不过,撰写函数时,我们很明确这是提供给别人的 API,而撰写带泛型的数据结构时,这种感觉并不强烈。...在回答 zoom chat 里大家提到的问题时,我没有读问题本身,这个对后来看视频的同学不够友好,不知道上下文。...贤者时刻 勘误:在讲 actor 例子之后的 Q&A,有小伙伴问道为什么 HandleCall trait 要实现在 Request 上,能不能实现在 Actor 上,因为他觉得实现在 Actor 上似乎更正确

    84930

    我用kafka两年踩过的一些非比寻常的坑

    接下来,我跟大家一起聊聊使用kafka两年时间踩过哪些坑? 顺序问题 1. 为什么要保证消息的顺序? 刚开始我们系统的商户很少,为了快速实现功能,我们没想太多。...后厨显示系统消费消息后,通过id调用订单系统的订单详情查询接口获取数据。 后厨显示系统判断数据库中是否有该订单的数据,如果没有则入库,有则更新。 ?...表面上看,已经解决了,但后面不知道什么时候,就会冒出一次,比如这次: 有天下午,产品过来说:有几个商户投诉过来了,他们说菜品有延迟,快查一下原因。 这次问题出现得有点奇怪。 为什么这么说?...其实技术心里的苦他们是不知道的。 表面上问题的症状是一样的,都是出现了菜品延迟,他们知道的是因为消息积压导致的。但是他们不知道深层次的原因,导致消息积压的原因其实有很多种。...我沉默不语,只能硬着头皮定位原因了。 后来我查日志发现消费者消费一条消息的耗时长达2秒。以前是500毫秒,现在怎么会变成2秒呢? 奇怪了,消费者的代码也没有做大的调整,为什么会出现这种情况呢?

    1K20

    花式解说防抖函数debounce的实现

    你可以通过歪马写的这个 demo 查看常规无限制函数调用和防抖(节流)之后的[可视化对比](),完整 demo 地址如下:https://codesandbox.io...但如果在经过正常的延迟执行(debounced 执行),中间又间隔了一段时间,再次触发的时候,首次触发会执行吗?” 马同学:“呃,我想想。好像是不会执行了。因为timerId一直有上次的值。...马同学:“呃(⊙o⊙)…不知道,老师我觉得你故意刁难我。你咋不叫羊同学他们” 歪老师:“哈哈,别这么说,老师是在锻炼你的思考能力。这里也可以借助类似上面的延时执行的思路。...马同学:“老师,我觉得应该还有问题。” 歪老师:“那有什么问题呢?” 马同学:“额,老师,我就猜的,其实不知道...您再给说说” 歪老师:“就知道耍小聪明,不过确实还是存在问题的。先看下图。” ?...这样还有没有问题呢?大家可以留言讨论哟”。 总结 我知道这篇文章似乎读起来让人晕晕乎乎的,并且你会发现,这和你想象中的防抖的实现似乎并不一样。但是这又怎样呢?

    93440

    “如今,99.9% 以上的代码都是垃圾!”

    这又不是火箭科技,实际上我自己用wininet API写这段代码,服务器用PHP和MySQL,尽管达不到企业级,但也能支持几十万文件的上传、下载和日志记录——一个人写代码大概也就是两三周的工作量?...代码膨胀似乎是像我这种老家伙的碎碎念,毕竟我已经上年纪了。但我们这帮老家伙们碎碎念的可不是代码运行减慢了50%、规模增大了50%。实际情况远不止于此。...你要是告诉他们,最初的Elite游戏能生成整个银河系,有3D狗斗,有职业系统,交易系统,还能探索上千个星球,而这一切只有64KB,他们也能接受,但完全没办法理解这与现在的软件之间有什么差距。...上点击硬盘图标时,我能看到明显的延迟,电脑在一点点画出用户界面。这需要很久,我估计至少有半秒钟,对于CPU来说这就像几十亿年那么长。...如果我没猜错,因为电脑里有99%的垃圾,99%的电力都被浪费了,这已经不能用犯罪来形容了。这些浪费的电力都干什么了?我不知道,但看看任务管理器就知道了:一大堆不知道是什么也不知道在干什么的东西。

    33010

    “如今,代码数已膨胀至天文级别”

    这又不是火箭科技,实际上我自己用wininet API写这段代码,服务器用PHP和MySQL,尽管达不到企业级,但也能支持几十万文件的上传、下载和日志记录——一个人写代码大概也就是两三周的工作量?...代码膨胀似乎是像我这种老家伙的碎碎念,毕竟我已经上年纪了。但我们这帮老家伙们碎碎念的可不是代码运行减慢了50%、规模增大了50%。实际情况远不止于此。...你要是告诉他们,最初的Elite游戏能生成整个银河系,有3D狗斗,有职业系统,交易系统,还能探索上千个星球,而这一切只有64KB,他们也能接受,但完全没办法理解这与现在的软件之间有什么差距。...上点击硬盘图标时,我能看到明显的延迟,电脑在一点点画出用户界面。这需要很久,我估计至少有半秒钟,对于CPU来说这就像几十亿年那么长。...如果我没猜错,因为电脑里有99%的垃圾,99%的电力都被浪费了,这已经不能用犯罪来形容了。这些浪费的电力都干什么了?我不知道,但看看任务管理器就知道了:一大堆不知道是什么也不知道在干什么的东西。

    51520

    从应用到内核查接口超时(下)

    再启 ---- 接上文 从应用到内核查接口超时(中),查到是因为 journal 导致 write 系统调用被阻塞进而导致超时后,总感觉证据还不够充分,没有一个完美的交待。...打印进程内核栈 ---- 回到问题的原点,对于此问题,我能确定的资料只有稳定复现的环境和不知道什么时候会触发 write system call 延迟的 jar 包。...延迟分配(delayed allocation):ext4 文件系统在应用程序调用 write system call 时并不为缓存页面分配对应的物理磁盘块,当文件的缓存页面真正要被刷新至磁盘中时,才会为所有未分配物理磁盘块的页面缓存分配尽量连续的磁盘块...转变方法 问题又卡住了,这时我也没有太多办法了,现在开始研究 linux 文件系统源码是来不及了,但我还可以问。...在脏页太多的情况下,分配磁盘块慢时会持有 inode 的写锁时间过长,阻塞了 write 系统调用。

    1.4K20

    MQ消息队列详解、四大MQ的优缺点分析

    MQ消息队列详解、四大MQ的优缺点分析 前言 面试题切入 面试官心理分析 面试题剖析 ①为什么要使用MQ 系统解耦 异步调用 流量削峰 消息队列的优缺点 四大主流MQ(kafka、ActiveMQ...MQ、Redis,但是为什么用这个,却不知道,这种人说白了就是为了用而用,又或者这个框架就是别人设计的,他自己都没了解过里面的东西,自然也不知道为什么要用。...系统解耦 首先举例下面这个场景,现有ABCDE五个系统,最初的时候BCD三个系统都要调用A系统的接口获取数据,一切都很正常,但是突然,D系统说:我不要了,你不用给我传数据了,A系统无奈,只能修改代码,将调用...面试技巧:你需要思考一下,在你自己的系统里面有没有类似的情况,一个系统或者模块,调用了多个系统或者模块,它们互相之间的调用非常复杂,并且维护起来很麻烦,但其实这个调用是不需要直接同步调用接口的,如果用MQ...异步调用 场景二,还是ABCD四个系统,A系统收到一个请求,需要在自己本地写库,还需要往BCD三个系统写库,A系统自己写本地库需要3ms,往其他系统写库相对较慢,B系统200ms ,C系统350ms,D

    1.2K30
    领券