本文为连载文章
建议先看上一篇文章:PHP网站必须这样配置才安全
当然你不想麻烦,我们也在这里回顾一下。
昨天回顾
主机(站点)配置
网站的两个核心信息是:
ServerName 站点名称/服务器名称/域名
DocumentRoot "站点的真实目录"
单站点配置项
端口攻丝:
监听端口号
设置主机(站点)的名称:服务器名称、站点名称
设置主机(站点)的化学路径:
目录访问权限
Options Indexes #设置显示“文件列表”的目录
Order Deny,先允许#Reject后允许或先允许后拒绝,无论顺序如何,前者优先于后者
允许所有人
#下一行允许我们设置文件夹的权限
允许覆盖全部
目录访问权限中的“分布式权限”:
站点的任何文件夹都可以“单独设置权限”:
1.此文件夹中需要放置一个特殊名称的文件:.htaccess
2.这个文件夹的内容可以和Directory中的设置几乎一样
3、该文件中的设置优先于Directory中的设置,即设置项相同但值不同时,以.htaccess中的设置为准;
4..htaccess中的设置项可以立即生效,无需重新启动apache。
多站点配置:
分 3 步:
1、在httpd.conf中,打开“虚拟主机配置文件”:apache安装位置/conf/extra/httpd-vhosts.conf
2. 在虚拟主机配置文件(httpd-vhosts.conf)中,添加一行指示多站点配置的 ip 端口:
名称虚拟主机 *:80
3、然后,其中,一个站点一次配置一个站点,每个站点的基本方法如下:
服务器名称....
文档根目录......
站点别名设置:
服务器别名别名1 别名2 ...
注意:它与ServerName并行编写。
目录别名(虚拟目录)设置:
就是设置一个“虚拟目录名”,供外界访问“站外内容”。
明天我们一起学习吧
PHP基本句型
php标签
有以下几种方式:
表格1(推荐):
表格2:
表格3(不推荐):
取决于php.ini中的一个设置项:
将其改为On即可使用上述方法。
php 的结束标签(如 ?> )在以下情况下可以省略:
php语句后面没有html代码部分
PHP 区分大小写的功能
1.变量区分大小写;
2.常量一般默认是区分的,但可以人为设置为不区分(但不推荐这些方法)
3.其他场合的关键字不区分,如函数名、系统关键字(for、if、return...)
句子以分号结尾
1、php句子标签中最后一个分号可以省略
2、如果省略php结束标签,则最后一个分号不能省略
PHP评论
单行注释:
表格1: //评论内容
表格2:#评论内容
多行注释:
/* 评论内容,可以多行 */
多行注释的2种方法:
有时,由于测试或其他原因,我们需要对一大段代码进行多次“注释”或“反注释”; 这时,我们可以使用以下两种方法来方便地实现:
提示1:
回复评论:
提示2:
回复评论:
多变的
基本了解
变量可以理解为只是代表某个存储空间和其中的数据的“标识符”——即名称。
$v1 = 1; 这行代码如下所示:
这就说明使用这个变量就意味着使用这个数据空间的数据值! 例如:
回声 $v1; ///输出为数据1
$v2 = $v1 + 3; //此时,估计实际上是1+3!
使用方法: 每个变量名必须以$开头。
定义方法: PHP 不支持变量的“简单定义”。 相反,当第一次使用可变参数时,它被定义为变量!
变量的基本操作
只有4个操作:
任务:
等号(=)左边放变量名,右边放“数据”,即形参;
$v1 = 1;
价值:
在任何需要一段数据的句子中使用变量,意味着从变量——value中获取变量的值;
概括起来,大致有以下几种情况:
回声 $v1; //获取v1的值并输出
$v2 = $v1; //获取v1的值,并给出其他变量参数;
$v2 = $v1 + 3; //取v1的值,与3进行运算!
$v2 = 轮( $v1 ); //取v1的值并使用函数round()将其向上舍入
判断isset(变量名):
作用:判断变量是否存在,或者变量是否有数据值! 如果有或者有数据值,则为true,否则为false
删除unset(变量名):
含义:删除变量并不是指从程序中删除该变量,而是“断开”变量名与变量原始数据值之间的“引用关系”(连接)!php数组定义,此时,就会有这样的结果:
1、变量名不再指向(引用)任何数据,因此其isset()判断结果为false
2.数据(也许)没有任何变量指向它,因此它变成“不可用数据”——通常它被手动回收
$v1 = 1;
取消设置($v1);
$s1 = isset($v1); //错误的
变量命名规则
基本规则——保证程序的正确性
以字母或逗号开头
后跟任意数量(包括 0)的字母、数字和逗号
行业规则——保证程序的可读性
有3种常见的命名法:
1. Camel命名法:第一个短语大写,后续每个短语的首字母小写
示例:$name $myName $myFatherName
2. Pascal的命名法:每个短语的首字母小写
示例:$Name $MyName $MyFatherName
3、下划线分割法:每个词组大写,用逗号分隔
示例: $name $my_name $my_father_name
变量传值的形式
1、变量的传值形式是指“一个变量传递给另一个变量”的内部细节——一对一;
2、变量按值传递只有2种形式:按值传递和按引用传递;
按值传递
$v1 = 1;
$v2 = $v1; //这是值传递
简单理解:去掉$v1的值(注意:$v1中的值还在),然后用这个值作为$v2的形参。
值传递意味着复制变量 v1 的值,然后将其作为形参传递给另一个变量 v2。
注意:
1 此时这两个变量的值相等;
2 这两个变量相互独立——互不影响;
即$v1 = 10; 然后回显 $v2; //输出1
通过引用传递
在php中,能够实现变量引用和值传递的句型只有一种:&符号。
示例如下:
$m1 = 1;
$m2 = & $m1; //引用传值形式
简单理解:将变量$m1与其数据值之间的“引用关系”复制一份,然后交给变量$m2,即此时变量$m2也与原来存在“引用关系”数据(指向关系);
结果发现:
1、此时还有2个变量,但是只有一个数据值(数据空间),并且两个变量都指向这个数据空间。
2、对任意一个变量的操作,实际上都是对数据值(空间)的操作;
代码对比demo:
可变变量:
$s1 = "abc"; //这是一个变量,存储字符串“abc”
$abc = 10; //
回声 $s1; //???,输出10
理解:
1. 在 PHP 中,“$”总是跟在变量名后面!
2、这里echo输出的变量名(第一个$标记)为:$s1,即“abc”
3、因此,这里的输出是$abc,即10
4、这种连续出现“$”的变量方法就是所谓的“变量变量”;
预定义变量
所谓预定义变量,其实是指php的语言工具中预定义的变量;
我们只是“使用它”。
审查
主要包括:$_GET、$_POST、$_REQUEST、$_SERVER、$GLOBALS、
两者都是链表
系统定义和维护——也就是说,我们不应该赋予它的形式参数或破坏它的价值,而只是“使用它的价值”。
具有超全局范围 - 无处不在。
不同情况下可能有不同的值
$_POST 变量
意义:
它代表了用户通过post表单(method=”post”)中的表单提交的所有数据——这就是所谓的post数据。
基本演示:
form_post.html页面:
post_data.php页面及输出结果为:
isset(变量):判断变量是否存在,或者变量是否为空(null); 如果存在则为真,否则为假
空(变量):判断变量的“内容”是否为空(不是null,而是没有内容),基本上是一些硬性的规则,下面的数据都是“空”:0、“”、“0” , false, null, array() 空链表也为空
如果变量内容为空,empty() 返回的结果为 true,否则为 false
小案例:php页面计算器:
$_GET变量
意义:
它代表了用户通过get表单提交的所有数据(有5种get方法)——这就是所谓的get data。
温馨提示:获取、发布没有翻译!
提交获取数据有5种方式:
表格1:
这种方式获取数据与post数据类似,数据内容由用户填写或选择!
表格2:
链接文本
阐明:
1.只是一个链接php数组定义,加“?”即可在链接文件名前面,然后一一“串联数据”;
2、数据方式为:数据项名称=数据值,用“&”符号分隔
3、这种方式的数据也是“点击链接”提交的获取数据,但用户只能选择点击或不点击,无法更改数据。
表格3:
阐明:
1、这句话可以看做是通过js技术实现的页面跳转功能,和标签的连接功能一模一样!
2.该语句通常放在一个函数中,然后由于暴风雨而调用该函数!
表格4:
阐明:
这句话看起来和方法3的功能一模一样,只不过是位置对象实现页面跳转的另一种句型罢了!
形式五:php的跳转句型
概括:
上述多个get方法提交的数据必须理解为:
跳转到某个页面,并“同时”携带(提交)某些获取数据过去!
无论哪种方式提交get数据,接收get数据的方式都只有一种,类似于post:
$v1 = $_GET['数据项名称']; //获取一个get数据项的值; 如$_GET['data1'], $_GET[“age”];
也可以“输出”所有获取的数据:
打印_r($_GET); 或 var_dump($_GET);
$_REQUEST变量
意义:
简而言之,它是 $_GET 变量和 $_POST 变量数据的“集合”:也就是说,它上面存储了这两种数据。
结果是:
如果表单是get提交方式:
结果是:
它如何同时获取和发布数据?
只有一种形式:
例子:
提交后的结果是:
请求数据取值时,和get数据、post完全一样!
$_REQUEST['数据项名称'];
当post数据和get数据的数据项名称相同时(其实我们是反对这样的),默认是post数据覆盖get数据。
但这种情况也可以在php.ini中设置:
默认情况下:
可以改为:
$_SERVER 变量
意义:
它代表网页浏览过程中浏览器端的一些信息或者服务器端的一些信息。
我们只能在程序中获取这类信息,并用它来编程! 例如:获取用户的访问IP地址。
注意:
不同的页面、不同的服务器、不同的时刻,这种信息可能会有所不同!
要求:
信息量大约有30条,我们只需要知道其中的5条就可以了! 有:
$_SERVER['REMOTE_ADDR']:获取访问者的ip地址
$_SERVER['SERVER_ADDR']:获取服务器的ip地址
$_SERVER['SERVER_NAME']:获取服务器的名称,实际上就是站点设置中的servername
$_SERVER['DOCUMENT_ROOT']:获取站点真实的化学地址,实际上就是站点设置中的documentroot
$_SERVER['PHP_SELF']:获取当前网页地址(不包括域名部分)
$_SERVER['SCRIPT_FILENAME']:获取当前网页地址的化学路径
$_SERVER['QUERY_STRING'] 获取当前网页地址中的所有 get 数据(即?号旁边的部分),但只是整个字符串。
$GLOBALS 变量
意义:
它也是一个“重复数据”,里面存储了我们自己定义的所有“全局变量”。
例子:
$v1 = 1; //定义一个全局变量,
此时,有这么一条数据:$GLOBALS['v1'],它的值为1
回显 $v1 ; //输出1
回显 $GLOBALS['v1']; //输出1
该变量主要用在局部作用域不能使用全局变量,而需要全局变量的值时。 这时候就可以用来获取全局变量的值了。
然后定义一个新变量:
查看相关资料和更多课程,请搜索微信公众号“爱能记个人版”。 如果你喜欢学习,请关注。 所有课程都是免费的! 点击关注,不迷路!
作为机器学习程序员的首选编程语言,Python近年来越来越受欢迎。由于AI的持续趋势,Python去年取代Java,成为全球大学生最流行的编程语言。机器学习领域的许多教科书、文章和技术文档在给出代码时都会使用 Python 作为示例语言,这表明 Python 的高度普及。
Python具有启动快、门槛低、语法结构相对简单、初学者容易上手、老手二次学习成本低等优点php换行,加上机器学习任务上的优势,简直是天经地流行起来。
但凡事都有例外,再好的事情,每个人都不能爱。
最近,在hackerfactor上,一个名叫Neal Krawetz的人写了一篇文章,指出了他无法忍受Python的八个原因,并从里到外都吐槽Python。
文章列举了笔者认为Python存在重大缺陷的八个原因,包括版本兼容性问题、安装版本混乱、唯一的程序关键字命名规则和常见的库命名约定,以及缺乏一致性、混乱的赋值传递、容易出错的本地文件命名策略。
总而言之,它出来了,把Python降级成一团糟。这篇文章在当前Python热潮的背景下可以被视为一朵“奇怪”的花。看太多蟒蛇颂歌是不是有点审美疲劳?改变口味。
原因 1:版本之间不兼容安装
Linux 后,它很可能会默认安装多个版本的 Python,可能是 Python 2 和 Python 3,甚至更多零碎的版本,例如 3.5 或 3.7。
这样做是有激励措施的:Python 3 与 Python 2 不完全兼容,其他一些版本在这方面存在足够严重的缺陷——向后兼容性(也称为向后兼容性)。
所以 Ubuntu 同时安装了 Python 2 和 Python 3,因为这个版本的核心功能是不同的。
缺乏向后兼容性和版本分离通常是消亡的早期预警。Commodore创造了第一个家用笔记本电脑(早在IBM PC或Apple之前)。但Commodore PET与后续的Commodore CBM计算机不兼容,CBM与VIC-20、Commodore-64、Amiga等不兼容。因此,用户要么花费大量时间将代码从一个平台导入到另一个平台,要么放弃该平台 - Commodore是一个教训。当用户选择放弃平台时,它注定要消失。
同样,Perl以前也很流行。但是当Perl3问世时,它并没有完全向后兼容Perl2的代码。接下来是Perl4。当Perl5问世时,许多人选择切换到其他更稳定的编程语言。所以昨晚,只有一小部分人积极使用 Perl 来维护现有的 Perl 项目,任何其他基于 Perl 的重大新项目再也没有出现过。
同样,Python 为每个版本设计了不同的代码孤岛。社区仍在拖放这个旧版本,所以你最终会得到这个旧的、过时的 Python 代码,因为没有人愿意花时间将其导入最新版本。
据我所知,没有人在 Python 2 上创建新的代码,但我们仍在让它生存下来,因为没有人将他们需要的代码导入到 Python 3.x 中。在Python官方网站上,这些文档被积极维护并可用于Python 2.7,3.5,3.6和3.7 - 因为它们很难丢弃旧代码。Python像编程语言的僵尸,行尸走肉一样向前移动。
原因二:安装老婆太麻烦
通常,您会在apt,yum,rpm之后直接获得最新的稳定版本。
但是如果你“apt-get install python”,你不知道它是哪个版本,它可能与你需要的所有代码都不兼容。因此,您需要在安装时指定 Python 版本。有一个项目需要Python 3.5
(当时的最新版本),但我最终在我的笔记本上安装了一堆版本:Python 2,Python 2.6,Python 3和Python 3.5。两个来自操作系统,一个是用于项目,一个是因为我安装了一些不相关的软件。
虽然他们是
都是“蟒蛇”,它们并不完全相同。
如果你想安装Python软件包,你应该使用“pip”(pip代表“pip安装软件包”)。但是因为系统上有很多版本的Python,所以你必须记住使用正确版本的pip。否则,“pip”可能会运行“pip2”而不是您需要的“pip3.7”。(如果名称不存在,则需要指定 pip3.7 的实际安装路径。)
我
一位同学告诉我,我需要配置我的环境,以便一切都可以与 Python 3.5 一起使用。它奏效了,但并没有持续很长时间,因为我开始了另一个需要 Python 3.6 的项目。两个并发项目有两个不同版本的 Python,emmmm,这有点难说。
pip 安装程序将文件放在用户的本地目录中。你不能使用 pip 来安装系统范围的库,Gawd 会阻止你犯运行“sudo pip”的错误,因为它会搞砸整个笔记本!
顺便问一下,谁维护这个点模块?答案是社区。也就是说,没有明确的所有者,也没有强制性责任。今年早些时候,PyPi的一个版本有一个发生SSH凭据抢劫的侧门,但我一点也不感到惊讶,因为社区存储库根本不可信。出于同样的原因,我不使用 Node.js 和 npm。
原因3:头痛句子结构问题,范围使用空格导致可读性差
我非常相信可读代码。乍一看,Python实际上非常可读,当你开始制作小代码库时,这种易读性会降低。
其他编程语言,如 C、Java、JavaScript、Perl 和 PHP,使用 {} 来表示范围;列出 ()。带空格的蟒蛇。如果需要为一段复杂的代码定义作用域,并且缩进接下来的几行代码,则在中止缩进时,作用域将中止。
Python 指南说,您可以使用任意数量的空格或制表符来定义范围。但是,每个缩进使用四个空格!如果要缩进两次进行嵌套,则必须使用八个空格!Python
社区长期以来一直将这个术语标准化,尽管它没有出现在Python指南中。文档中的示例说明可以使用 TAB、“TAB+1 空格”等。但是社区对 4 个空间有一种疯狂的偏执狂!因此,除非您准备永远不向其他人展示您编写的代码,否则请为每个缩进使用四个空格。
当我第一次看到 Python 代码时,我认为使用缩进来定义作用域实际上是一个好主意。其实我太天真了,这简直就是一个巨大的缺点。
深度嵌套是可能的,但每一行代码都会显得很宽,并且必须换行在文本编辑器中。长函数和长条件操作都会使开始和结束看起来不匹配。我可怜那些错误估计空间数量的人(例如只有 3 个空格而不是 4 个),因为此类错误需要数小时来调试和跟踪。我的调试代码
习惯没有缩进,因此我可以快速浏览代码,并在完成后轻松识别和删除调试代码。
但是Python呢?如果缩进错误,将报告错误。
原因4:特立独行加载库表单
大多数编程语言都有某种方式来包含其他代码块。对于 C,它是“#include”。对于 PHP,有“include”、“include_once”、“require”和“require_once”。对于Python来说,它是“导入”。
Python 的导入允许导出整个模块、模块的一部分或模块中的特定功能。但是找到导出代码块的方法很麻烦。使用 C 并查看 /usr/include/*.h。但是在蟒蛇中呢?最好使用“python -v”列出所有位置,然后在该列表中的每个目录和子目录中搜索每个文件。真的很麻烦。
导入功能还允许用户重命名导出的代码,这基本上定义了一个命名空间。乍一看,这似乎很棒,但它最终会影响可读性和全年支持。重命名模块对于小脚本特别好,但对大型程序来说真的很糟糕。这样的操作“导入 numpy as n”,应该被黑死。
但这还不是最糟糕的部分。对于大多数语言来说,包含代码实际上只意味着包含代码。某些语言(如面向对象的C++)可以执行代码。类似地,某些 PHP 代码可能会定义全局变量,以便导入可以运行代码,但这通常被认为是一种不好的做法。相比之下,许多 Python 模块都包含导出期间运行的初始化函数。你不知道什么在运行,你不知道它在做什么,你甚至没有注意到它。除非存在命名空间冲突,否则在这些情况下,您将不得不花费很长时间来查找原因。
原因 5:关键字和库命名是“唯一的”
在所有其他编程语言中,数组称为“数组”。在Python中,数组被称为“列表”。在其他语言中,关联链表有时被称为“哈希”(Perl),但在Python中它们被称为“字典”。不过,Python并未用于计算机和信息科学领域。
然后是库的名称。看看名字,PyPy,PyPi,NumPy,SciPy,SymPy,PyGtk,Pyglet,PyGame...(是的,前两个名称的发音完全相同,但它们的功能和用途却大不相同。我知道“py”代表Python。但是这两个字母不能固定在图书馆的开头或结尾吗?
一些常见的库不继承这种所谓的“Py”命名约定。示例包括matplotlib,nose,pillow和SQLAlchemy。尽管库的某些功能只能从某些命名中看到(例如,“SQLAlchemy”包含SQL,因此它可能是SQL套接字),但许多名称只是随机短语。如果你不知道“BeautifulSoup”是干什么用的,你能从名字上看出它是一个HTML/XML解析器吗?
(顺便说一下,BeautifulSoup库有很好的文档记录,非常易于使用。如果每个Python模块都如此易于使用,我就不会在这里抱怨太多了。不幸的是,这是例外,而不是常态。大多数 Python 库的文档都烂透了。)
总的来说,我认为 Python 对库的命名令人困惑,缺乏一致性原则。我一直认为开源项目的命名有这些规则令人困惑。除非您知道该项目,否则您无法从项目名称中看到它。除非您知道要查找的内容,否则您可能永远找不到所需的内容。从大多数 Python 库的命名来看,我现在越来越相信这个观点。
理由6:其他“独特”的东西稍微多一点
每种语言都有其怪癖。在 C 语言中,使用 & 和 * 访问地址空间和值是一个奇怪的命名法。C 还具有可变增量和减法控制方法,例如“++”和 --“在 Bash 语言中,在引用特殊字符(如正则表达式的括号和句点)时需要反斜杠。
JavaScript 存在兼容性问题(并非每个浏览器都支持所有有用的功能)。然而,Python比我见过的任何其他语言都更奇怪。以字符串为例:
在 C 中,双引号用于字符串,单冒号用于字符。
在 PHP 和 Bash 中,这两种类型的冒号都可以用于字符串。但是,使用双引号时,可以在字符串中嵌入变量。相反,括在单个冒号中的字符串是文本。任何名称(如嵌入式变量)都不可扩展。
在 JavaScript 中,单冒号和双引号之间实际上没有区别。
在 Python 中,单冒号和双引号之间没有区别。但是,如果您希望字符串跨越行,则需要使用三个冒号 “”“字符串”或“字符串”“”如果要使用二进制文件,则需要使用 b(b'binary') 或 r(r'raw') 来首选字符串。有时需要使用str(string)进行字符串转换,或使用string.encode('utf-8')将其转换为utf8。
如果你认为 =、== 和 === 在 PHP 和 JavaScript 中有点奇怪,那就等到 Python 中使用冒号吧。
原因7:分配方法很奇特
大多数编程语言按值传递函数参数。如果函数更改值,则结果不会传递回调用代码。但Python不同。默认情况下,Python 使用按对象引用传递参数执行函数。这意味着修改源变量最终可能会更改值。
这是面向程序、函数式和面向对象的编程语言之间的主要区别之一。如果每个变量都是通过对象引用传递的,并且对变量的任何修改都会导致变量值在其他任何地方更改,那么显然您可以将所有全局变量用于所有内容。使用不同的名称调用同一对象不会修改对象的值,因此该对象实际上是全局的。在C程序员中有一种说法,全局变量是邪恶的,不应该使用。
在 Python 中,变量必须按值传递。“A = B”只是将另一个名称分配给相同的对象空间,而不将B的值分配给A。如果要形成参数,则需要使用复制功能。通常的格式是“a = b.copy()”。但是,请注意,我说的是“通常”。并非所有数据类型都可以以这种方式形成参数,并且某些功能可能不完整。使用一个名为“copy”的单独库:“a = copy.deepcopy(b)”。
原因 8:本地程序命名令人困惑
根据所使用的库或函数命名程序是一种常见的编程技术。例如,如果我正在使用名为“libscreencapture.so”的 C 库测试屏幕捕获程序,则我调用的程序可能命名为“screencapture.c”并编译为“screencapture.exe”。
如果使用 C、Java、JavaScript、Perl、PHP 等,这种命名方法很好php换行,因为编程语言可以很容易地将存储库与本地程序区分开来,因为彼此的路径不同。但是如果你使用的是Python,永远不要这样命名。
为什么?Python 始终假定用户首先要导出本地代码。如果我有一个名为“screencapture.py”的程序使用“导入屏幕捕获”,那么它将导出自身而不是系统库。至少,本地程序需要命名为“myscreencapture.py”以防止这些错误。
当然,抱怨太多了,但毕竟Python也不是没用的。
Python是一种非常流行的语言,有大量的使用者。我的一些同学真的很喜欢Python,这是他们喜欢的编程语言。多年来,我一直与他们讨论过这个问题,每次他们都点头表示同意。他们没有证明Python真的有这个问题,只是不足以让他们放弃Python。
我的同学经常引用编程中存在的所有特别酷的Python库。我还发现一些库非常有用。例如,BeautifulSoup是我用过的最好的HTML解析器之一,NumPy使多维链表和复杂的物理过程更容易实现,TensorFlow对机器学习特别有用。但是,我不会用Python创建一个整体程序,因为我喜欢TensorFlow或SciPy。为了方便单个库,放弃程序的可读性和可维护性是不值得的。一般来说,当我写一个
话题的负面批评时,我也会尝试写一些积极的东西。例如,当我写FFmpeg的局限性时,我也明确提到它是最好的视频处理库。但我不能在这里写关于Python的好处,因为我真的认为Python很糟糕。
这篇文章一出,就引起了评论区的激烈争论:
“是你不懂蟒蛇”
马里奥·阿巴卡
你的问题可以总结为一件事:你不喜欢Python,因为它与C不同。
版本不兼容不是错误,而是一种功能;我只是不认为没有人维护的东西,它们不应该再被使用,使用虚拟环境安装不同版本的 python 而不是在同一环境中安装,现代编辑器默认 TAB=4 空格。您也不必使用 4 个空格,但为了确保一致性,官方文档非常好,真的。如果你在标准库中没有它,我认为 Python 的命名风格非常好,更直观。列表不是一个字段,它是一个序列;关联的字段显然是字典二进制字符串,后跟 b,因为在 Unicode 规范中,1 字节≠ 1 字节对此很有用,这样我就可以随时随地引用某些内容,而不必每次都复制和粘贴原始名称
诺塔科沃德
1和2是同一个问题,关于整个生态,而不是语言本身。因为这种社区维护项目是不同的人花费宝贵的业余时间来维护,每个人都有每个人的习惯和价值观,这只能说明你自己太个人化了。我们保留默认的统一样式,这对于其他人来说更容易维护,C/C++ include 很难处理,模块套接字、列表和数组不算什么。接下来,每种语言都有自己的一组转换方法。Python 可能不是最完美的,但其他的更差,呵呵对象引用更有效率。特别是当变量名称不一致时,您将无法直接复制。但是如果你引用它,它们有很多,最好不要将你的程序命名为标准库中的程序或模块
民俗
首先,我必须纠正你,PyPy 和 PyPi 的发音不同。前者是“馅饼”,后者是“馅饼-放屁-爱”
其次,名字重要吗?第三方兄弟,任何名字都可以出现E阿姨。你能保证当你选择你的名字时,你可以做辛达亚阿姨吗?
jaxtellerSoA
我不明白。用缩进定义范围有什么不好?真是一瞥!其他语言 {} 不是也必须缩进吗?此外,您不觉得按住shift可以键入{}很可悲吗?
有风险
我和C粉丝讨论了“缩进与括号”的问题。他说,没有括号,你怎么能轻易找到范围?
标准的Py粉丝答案是:啊,大家都喜欢括号,因为大家的不良代码习惯。
我想了想,可能更合适的问题是:如果你不使用文本编辑器/IDE来突出显示括号或它们之间的空格,你会坚持使用括号而不是缩进吗?
恐怕他终于明白我的意思了,说:“啊,我明白了,你使用缩进是因为Python编辑器太丑了!多么可悲。
标志。
“我也不喜欢Python。
可爱
Python是我开始的第一门语言,但我再也没有使用过它。当然,作者的这种问题,在我看来,不是问题,只是个人习惯。
包管理模型简直太糟糕了。这么多包管理器可以学啊,pip能不能没那么糟糕啊不能有一个标准包管理器有标准清单吗?并且不会怀孕!
特温德
安装确实令人头疼。是的,很多人提到安装虚拟环境,venv/virtualenv。Ruby 具有 RVM,因此您可以在同一环境中轻松使用不同的版本。我宁愿一个接一个地给Ruby,PHP,Perl...做环境配置,不愿意配置Python。
尼科本斯
哦!多行 Lambda!我在JS中最喜欢的。在 Python 中,不!是的!完成!
设置补丁地址
我从 1.5 开始就一直在使用 Python。缩进表示语句块,这对我来说是最不能容忍的!
德柯蒂斯
我只是喜欢C的括号和Python的缩进。
漏勺
我觉得 Python 最大的问题似乎是内部模型太复杂了,对于它的意图来说,这对于有经验的开发人员来说很难理解,更不用说初学者了。