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

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

也就是说,Python 没有必要在语法层面规定程序员必须定义出一个统一的入口(不管是函数还是类还是什么东西)。...除了函数名是“main”以外,它跟我们前面介绍的正统的 main 函数没有半毛钱关系,既没有强制性,也没有必然决定程序执行顺序的作用。缺少它,也不会导致什么语法问题。...每次看到这种不假思索的累赘代码,就觉得难受。为什么要写那行 if 语句呢?可能的话,应该拆分 main 函数,甚至不必封装成一个函数啊! 个人总结出以下的经验: 打破惯性思维,写出地道的代码。...最后,多文件的非入口文件也建议写,因为在非入口文件中写这个判断,最大的作用就是写一些测试代码,但是测试代码应该分离出来,写到专门的目录或文件中。...小结:本文首先解释了什么是 main 入口函数,以及为什么某些语言会强制要求写 main 函数;接着,解释了为什么 Python 不需要写 main 函数;最后则是针对某些人存在的惯性误区,分享了个人的四点编程经验

2.3K31

发现了华点:vue规定用普通函数定义方法,为什么react又要用箭头函数

大家好,是年年! 如果使用过react和vue,应该发现过一个问题:vue告诉我们不应该把方法、生命周期用箭头函数定义;而在react的类组件中,把方法写成箭头函数的形式却更方便。...,是被挂载到原型链上的;而使用箭头函数定义的方法,直接赋给了实例,变成了实例的一个属性,并且最重要的是:它是在「构造函数作用域」被定义的。...我们知道,箭头函数没有自己的this,用到的时候只能根据作用域链去寻找最近的那个。放在这里,也就是构造函数这个作用域中的this——组件实例。...回到我们写的vue代码,它本质就是一个对象(具体一点,是一个组件的配置对象,这个对象里面有data、mounted、methods等属性)也就是说,我们在一个对象里面去定义方法,因为对象构成作用域,所以这些方法的父作用域都是全局作用域...箭头函数要去寻找this,就只能找到全局作用域中的this——window对象了。

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

python学习之21天挑战赛(3)

​ 目录 1.示例怼脸 2.def语句和参数 3.局部作用域和全局作用域  3.1局部变量不能在全局作用域中使用 3.2局部作用域不能使用于其他局部作用域内的变量 ---- ​ 活动地址:CSDN21...,渴望知识储备自己的一个菜狗 个人主页:不叫内谁的博客_CSDN博客-领域博主 本文目标:对函数定义进行详解。...hello() hello() hello() 输出如下  如果采用函数,则需用print多行输入,或者建立一个循环来实现。...,程序并没有创建name这个变量,如图 这涉及到局部作用域和全局作用域  3.局部作用域和全局作用域  3.1局部变量不能在全局作用域中使用 如上述命令中,name 并没有被赋值,即在全局作用域中,name...然后infoq函数被调用,创建第二个局部作用域,多个局部作用域能同时存在,局部变量被赋值为101 但是当infoq()返回时,在它本身定义域中所进行的number定义的赋值将被销毁 在number 作用域中

17820

一看就懂的var、let、const三者区别

至于 checkscope 函数中的变量 a 为什么输出 undefined,可以参阅《作用域和作用域链》章节。...特点总结 var 关键字 没有块级作用域的概念 有全局作用域、函数作用域的概念 初始化值默认为 undefined 存在变量提升 全局作用域用 var 声明的变量会挂载到 window 对象下 同一作用域中允许重复声明...什么是块级作用域?如何用? 参考答案: var 定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问,有变量提升。...let 定义的变量,只能在作用域里访问,不能跨块访问,也不能跨函数访问,无变量提升,不可以重复声明。...const 用来定义常量,使用时必须初始化(即必须赋值),只能在作用域里访问,而且不能修改,无变量提升,不可以重复声明。 最初在 JS 中作用域有:全局作用域、函数作用域。没有块作用域的概念。

45620

12 - JavaScript 中的作用域​

Function or Local Scope 当在一个函数中声明一个变量时,它只能在函数中使用外面无法使用。因为它的作用域只归属于函数。...= "Bhagat"; console.log(last); // Bhagat } sayLastName(); console.log(first); // Parwinder 即使能在函数外中获取...在这个例子中,当我们在 sayLastName 中打印 first 时,JS 引擎首先会在函数作用域中查找,之后在全局作用域中查找。若任何作用域中都没有找到,则会报一个引用的错误。...Block Scope 块级作用域是被定义在一对大括号中的。根据定义函数是一个快,但函数中还有更小的快。函数中的 for loop 或 if 语句都有它们自己的块级作用域。...不是说只有三种作用域吗?词法作用域是 JavaScript 中使用的作用域模型。变量或函数作用域是它们被定义时所在的作用域。 • 词法作用域又叫静态作用域。

54830

Rust学习笔记之包、Crate和模块

通过执行 cargo new --lib restaurant,来创建一个新的名为 restaurant的库。在 restaurant/src/lib.rs 中,来定义一些模块和函数。...通过使用模块,我们可以把「相关的定义组织起来」,并通过模块命名来解释为什么它们之间有相关性。使用这部分代码的开发者可以更方便的循着这种分组找到自己需要的定义,而不需要通览所有。...通过在 crate 根增加 use crate::front_of_house::hosting,现在 hosting 在作用域中就是有效的名称了,如同 hosting 模块被定义于 crate 根一样...「父模块引入作用域」,我们必须在调用函数时指定父模块,这样可以清晰地表明函数不是在本地定义的,同时使完整路径的重复度最小化。...如果没有指定 pub use,eat_at_restaurant 函数可以在其作用域中调用 hosting::add_to_waitlist,但「外部代码则不允许使用这个新路径」。

85710

灵活使用JS函数声明与函数表达式要弄清哪两点?

首先,函数声明会在任何表达式被解析和求值之前先行被解析和求值。即使声明位于源代码中的最后一行,它也会先于同一作用域中位于最前面的表达式被求值。...其实原理就是靠的作用域与变量提升机制,这块先细说,后面单独写篇文章吧。...18 } 19}else { 20 foo = function(){ 21 console.log('4'); 22 } 23} 24foo(); 注意,这里第二个示例为什么注释为伪正确示例...var bar = function foo(){};实际上就是一个命名函数表达式,这里有个细节需要注意:即这个名字(标识符)只在新定义函数作用域中有效,规范要求标识符不能在外围的作用域中有效。...1var f = function foo(){ 2 return typeof foo; //foo只在内部作用域中有效 3} 4console.log(typeof foo);

64430

把99%的程序员烤得外焦里嫩的JavaScript面试题

执行级代码块中的变量和函数自动提升作用域 2. 如果有局部符号,执行级代码块会优先进行作用域提升,而非执行级代码块,会优先考虑局部符号 估计刚看到这两点区别,很多同学有点懵,下面就来挨个解释下。...这说明类b也被锁死在顶层作用域中,不可被其他作用域的变量替换。...那么p1类肯定是在第1遍处理了,只是处理方法与函数不同,只是将p1类作为符号保存到符号表中,在使用p1类时并没有检测当前作用域的符号表,因此,只能在使用类前定义这个类。...第2遍扫描时,执行到var a = 99时,会发现函数a已经在当前作用域了,所以在同一个作用域中,后面处理的符号会覆盖前面的同名符号,所以函数a就被变量a覆盖了。因此,会输出99。...} a = 30; // 处理 } console.log(a); // 处理 到现在为止,第1遍扫描结束,得到的结果只是在顶级作用域中添加了一个函数a。

47020

前端学习(34)~js学习(十一):作用域和变量提升

作用域:通俗来讲,作用域是一个变量或函数作用范围。作用域在函数定义时,就已经确定了。 目的:为了提高程序的可靠性,同时减少命名冲突。...在全局作用域的任何一地方,都可以访问这个变量。 在全局作用域下,使用 var 声明的变量是全局变量。 特殊情况:在函数内不使用 var 声明的变量也是全局变量(建议这么用)。...局部变量: 定义函数作用域的变量,叫「局部变量」。 在函数内部,使用 var 声明的变量是局部变量。 函数的形参也是属于局部变量。...('函数 fn1'); } 函数表达式: 使用函数表达式创建的函数var foo = function(){},不会被声明提前,所以不能在声明前调用。...提醒2:定义形参就相当于在函数作用域中声明了变量。

70610

let const 与var的区别

翻译为中文,意思是a已经被定义。 第三点:let可以形成块级作用域,在es6之前javascript只有函数作用域,没有块级作用域。那在es6之前我们是怎么实现块级作用域的呢?...可以看到通过一个立即执行函数表达式,我们实现了一个局部作用域或者块级作用域,但是有了let之后就不需要写这样的代码了,代码修改如下。 ? 执行结果: ? 可以看到两者实现的效果是一样的。...结果为什么是这样的呢?这里面涉及里javascript里面的两个知识点,作用域和定时器setTimeout回调函数异步执行。...明白了原理就好改造了,既然定时器的回调函数中的i每次都是从全局作用域中取值,能不能在循环的时候将其放到局部作用域中呢,当然可以看代码: ? 执行结果为: ? 那这些和let有什么关系呢?...赋值的话,没有任何意思,所以报错,看代码: ? 执行结果为: ?

1.9K30

通过内置对象理解 Python(一)

如果在本地作用域中访问外部变量,是可行的;但是在本地作用域中创建的任何变量都不会影响外部的作用域。所以在内部函数中重新赋值 x = 33 并不影响外部所定义的 x 的值。...但是,如果想影响外部作用域,怎么办? 为此,可以在使用关键词 nonlocal ,让它来告诉解释器:你不是要在局部作用域中定义一个新变量,而是要修改闭包作用域(外围作用域)中的变量。...全局作用域指定义模块中的顶级变量、函数和类的作用域。...例如:time 是标准库中的一个模块(用 import time 导入),而 time.sleep() 是定义在 time 模块的全局作用域中函数。...关于 Python 的内置作用域,以下两个方面需要了解: 它是定义 Python 所有顶级函数(或内置函数)的作用域,比如 len 、range 和 print 。

47810

发现已经忘记了如何给这类文章取名字了,还是看着以前的项目想起来的。既然定下来了未来5年的发展计划,那么从现在开始就应该坚持下来了。...同时由于const类型无法自动转化为非const类型,所以const型对象只能调用const成员函数。 类的作用域:类本身就是一个作用域,类中的所有成员定义在类这个作用域中。...只用调用类方法就好了,不用关注该如何设置数据成员 到此为止,书中提到了两种访问权限,public和private: public: 后定义的成员可以在整个程序内被访问 private: 后定义的成员只能在类的成员函数中被访问...在c++ 中,内层作用域中的同名成员会覆盖外层,当函数内部或者类内部定义了与全局作用域相同的变量时,要使用全局作用域中的变量可以使用:: 类构造函数相关 在构造函数中初始化列表相当于先定义再赋值,而要做到对成员变量定义的同时初始化...它们包含this指针,静态函数成员不能被声明成const类型,也不能在静态函数成员中调用非类的静态成员 不能在类的内部初始化类的静态成员,static关键字只能出现在类内部声明语句中,定义的时候不能加

57910

深入理解Python变量作用域与函数闭包

2.4作用域的类型: 在Python中,使用一个变量时并不严格要求需要预先声明它,但是在真正使用它之前,它必须被绑定到某个内存对象(被定义、赋值);这种变量名的绑定将在当前作用域中引入新的变量,同时屏蔽外层作用域中的同名变量...,不过还是想多啰嗦两句: 1) #1的地方,python寻找名为x的local变量,在inner作用域内的locals中寻找不到,python就在外层作用域中寻找,其外层是outer函数。...Python支持一种特性叫做函数闭包(function closures):在非全局(global)作用域中定义inner函数(即嵌套函数)时,会记录下它的嵌套函数namespaces(嵌套函数作用域的...上面的例子中,x是固定的,所以每次调用inner函数的结果都一样。 如果上面的x固定呢?...通过这个例子,我们可以创建多个自定义函数。 5、再回首 说了这么多,相信你们都知道文章一开始的错误怎么修正了,同时也知道为什么报的UnboundLocalError错误了。

1.6K60

理解 JavaScript 中的作用

它再次需要首先在此刻的当前作用域(也即函数bar的作用域)而不是全局作用域中查找。foo是在这个函数作用域中声明的吗?并不是。那么,它就会继续向上查找父作用域,函数的外层作用域是全局作用域。...函数作用域 正如我们在词法作用域中看到的,解释器在当前作用域声明变量,也为这函数中声明的某变量会在函数作用域当中。这种作用域限制于函数本身及其内部定义的其他函数。...= 2; // O只能在函数作用域中访问 return amount * _conversionRate; } console.log(convert(5)); console.log(_conversionRate...ES6中,let 和 const 定义的便来那个都显式地声明了当前作用域为块级作用域而不是函数作用域。也就是说,这些变量只能在声明它们的当前所属的块中访问,这些块可以由 if,for语句或函数生成。...let lastName = 'Doe'; // 只能在 if 作用域中访问 const fullName = firstName + ' ' + lastName; // 只能在 if

91010

FlutterDart-入口函数

函数与 Dart 不同,JavaScript 并没有强制要求 main 函数在 JavaScript 中,全局作用域本身就像一个 main 函数但是,可以按照类似的方式定义一个名为 main 的函数,...;}// 调用 main 函数main();这段代码创建了一个 main 函数,并在全局作用域中调用它。...在 JavaScript 中,main 函数不是必需的,你可以直接在全局作用域中编写代码。调用方式Dart 程序自动调用 main 函数。...用途在 Dart 和 JavaScript 中,main 函数(或全局作用域中的代码)都用于初始化程序、调用其他函数或执行程序逻辑。...本期结束咱们下次再见~ 关注迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,一般看到都会回复的。大家点赞支持一下哟~

21730

Rust模块系统

简介 Rust 的模块系统用来管理代码的组织,包括哪些内容可以被公开,哪些内容作为私有部分,以及程序每个作用域中的名字等。...模块(Modules)和 use: 允许你控制作用域和路径的私有性。 路径(path):一个命名例如结构体、函数或模块等项的方式。 2....通过使用模块,我们可以将相关的定义分组到一起,并指出他们为什么相关。 3.2 模块树 前面提到,src/main.rs 和 src/lib.rs 叫做 crate root。...通过 use 引入作用域的路径也会检查私有性,同其它路径一样。 使用 use 引入函数时,习惯将函数的父模块引入到作用域,这样可以清晰地表明函数不是在本地定义的,同时使完整路径的重复度最小化。...,在新作用域中可用的名称是私有的。

41630

【C++入门】命名空间、缺省参数、函数重载

域 在了解命名空间之前,我们先来了解一下域这个概念,我们目前所知的域就是全局作用域以及局部作用域,局部域与全局域的使用以及生命周期都是不同,局部域作用于局部,只能在局部使用(一般都是自己所在的{}内),...这里就涉及到了::(作用域限定符)如下: #include int a = 10;//作用于全局 void test() { int a = 20;//只能在{}内使用...int b=10, int c=20); //这里需要注意,半缺省参数必须从右往左依次来给出,不能间隔着给,即不可以写成(int a=10,int b,int c=30)这种形式 //另外:缺省参数不能在函数声明和定义中同时出现...函数重载则是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这 些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型 不同的问题。...另外: 如果两个函数函数名和参数是一样的,返回值不同是构成重载的,因为调用时编译器没办 法区分。 ---- end 生活原本沉闷,但跑起来就会有风!

64530

再谈JS闭包

块级作用域 不同的作用域能够拥有同名的变量 外部作用域的变量可以在内部作用域中访问 JS通过「词法作用域」(静态作用域)来实现变量查询机制 「闭包(closure)是一个函数」:其有权访问其词法作用域内部的变量即使该函数在词法作用域外部被调用...作用域 当你定义一个变量,你想要该变量在某些范围内是「可访问的」。例如:在fnnc()内部定义一个变量 result,该变量只能在函数内部可见;而在函数外部是不可访问的。...如果你在函数内部或者块级作用域内定义了一个变量,你只能在函数内部或块级作用域内部访问该变量。...「函数执行和函数定义的地方大相径庭」。 但是,由于handleClick()是一个闭包,所以,它能够记住(捕获)对应词法作用域中的变量countClicked,并且在点击按钮的时候,更新该变量的值。...,把预先处理的内容都存在这个销毁的作用域里面,并且返回一个函数,以后要执行的就是这个函数

2.8K30
领券