【Python】为什么不可以运行?语法在哪里错了?

1、谈谈对 Python 和其他语言的区别?
答:Python 是一门语法简洁优美,功能强大无比,应用领域非常广泛,具有强大完备的第三方库,他是一门强类型的可移植、可扩展,可嵌入的解释型编程语言,属于动态语言。

  • 和Java相比:Python比Java要简单.Python是函数为一等公民的语言,而Java是类为一等公民的语言.Python是弱类型语言,而Java是强类型语言。
  • 和C相比:对于使用:Python的类库齐全并且使用简洁,很少代码实现的功能用C可能要很复杂。对于速度:Python的运行速度相较于C,绝对是很慢了.Python和CPython解释器都是C语言编写。


2、谈谈Python 的特点和优点是什么?
答:Python 是一门动态解释性的强类型定义语言:编写时无需定义变量类型;运行时变量类型强制固定;无需编译,在解释器环境直接运行。

  • 解释性:一个用编译型语言(如 C 或 C++)写的程序,可以从源文件转换到一个计算机使用的语言。这个过程主要通过编译器完成。当运行程序的时候,我们可以把程序从硬盘复制到内存中并且运行。而 Python 语言写的程序,则不需要编译成二进制代码,可以直接从源代码运行程序。在计算机内部,由 Python 解释器把源代码转换成字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。
  • 动态性:在运行时可以改变其结构的语言 :例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。动态语言目前非常具有活力。Python便是一个动态语言,除此之外如 PHP 、 Ruby 、 JavaScript 等也都属于动态语言 。
  • 面向对象:面向对象编程简单来说就是基于对 类 和 对象 的使用,所有的代码都是通过类和对象来实现的编程就是面向对象编程!面向对象的三大特性:封装、继承、多态
  • 语法简洁:Python 是一种代表简单注意思想的语言,阅读一个良好的 Python 程序,即使是在 Python 语法要求非常严格的大环境下,给人的感觉也像是在读英语段落一样。换句话说,Python 编程语言最大的优点之一,是其具有伪代码的特质,它可以让我们在开发 Python 程序时,专注于解决问题,而不是搞明白语言本身。
  • 开源:Python 是开源的,简单地理解就是,用户使用 Python 进行开发和发布自己编写的程序,不需要支付任何费用,也不用担心版权问题,即使作为商业用途,Python 也是免费的。开源正在成为软件行业的一种发展趋势,现在有很多商业软件公司都开始将自己的产品变成开源的(例如 Java)。也许,Python 的开源正是它如此优秀的原因之一,因为会有这么一群人,他们希望看到一个更加优秀的 Python,从而为了这个目标,不断地对 Python 进行创造,不断地改进。
  • 可扩展性:Python 的可扩展性体现为它的模块,Python 具有脚本语言中最丰富和强大的类库,这些类库覆盖了文件 I/O、GUI、网络编程、数据库访问、文本操作等绝大部分应用场景。


3、说说Python解释器种类以及特点?
答:Python是一门解释器语言,代码想运行,必须通过解释器执行,Python存在多种解释器,分别基于不同语言开发,每个解释器有不同的特点,但都能正常运行Python代码。
Python解释器主要有以下几个:

  • CPython:官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。CPython是使用最广且被的Python解释器。
  • PyPy:PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。
  • 绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。

在这些Python解释器中,使用广泛的是CPython

4、说说Python面向对象三大特性?
答:Python是一门面向对象的语言。面向对象都有三大特性:封装、继承、多态。
下面分别来说说这三大特性:

  • 封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式。在python中用双下划线开头的方式将属性设置成私有的 。好处:plie()函数),然后再执行比较和匹配。
  • 采用生成器表达式替代列表解析:列表解析会产生整个列表,对大量数据的迭代会产生负面效应。而生成器表达式则不会,其不会真正创建列表,而是返回一个生成器,在需要时产生一个值(延迟计算),对内存更加友好。
  • 关键代码使用外部功能包:使用 C/C++ 或机器语言的外部功能包处理时间敏感任务,可以有效提高应用的运行效率。这些功能包往往依附于特定的平台,因此你要根据自己所用的平台选择合适的功能包 。比如下面四个功能包:Cython、Pylnlne、PyPy、Pyrex 。
  • 在排序时使用键:Python 含有许多古老的排序规则,这些规则在你创建定制的排序方法时会占用很多时间,而这些排序方法运行时也会拖延程序实际的运行速度。最佳的排序方法其实是尽可能多地使用键和内置的 sort() 方法。
  • 优化算法时间:算法的时间复杂度对程序的执行效率影响最大,在Python中可以通过选择合适的数据结构来优化时间复杂度,如list和set查找某一个元素的时间复杂度分别是O(n)和O(1)。不同的场景有不同的优化方式,总得来说,一般有分治,分支界限,贪心,动态规划等思想。
  • 循环优化“每种编程语言都会强调需要优化循环。当使用Python的时候,你可以依靠大量的技巧使得循环运行得更快。
  • 技巧 1:减少循环内部不必要的计算
  • 技巧 2:嵌套循环中,尽量减少内层循环的计算
  • 技巧 3:尽量使用局部变量
  • 交叉编译你的应用:计算机其实并不理解用来创建现代应用程序的编程语言,计算机理解的是机器语言。所以我们可以用Python语言编写应用,再以C++这样的语言运行你的应用,这在运行的角度来说,是可行的。Nuitka是一款有趣的交叉编译器,能将你的Python代码转化成C++代码。这样,你就可以在native模式下执行自己的应用,而无需依赖于解释器程序。你会发现自己的应用运行效率有了较大的提高,但是这会因平台和任务的差异而有所不同。

28、Python实现自省的方法有哪些?
答:自省是一种自我检查行为。在计算机编程中,自省是指这种能力:检查某些事物以确定它是什么、它知道什么以及它能做什么。自省向程序员提供了极大的灵活性和控制力。
说的更简单直白一点:自省就是面向对象的语言所写的程序在运行时,能够知道对象的类型。一句可以概况为:运行时能够获知对象的类型。
Python实现自省有很多方法,常用的有

  • type(),判断对象类型
  • dir(), 带参数时获得该对象的所有属性和方法;不带参数时,返回当前范围内的变量、方法和定义的类型列表
  • help() , 用于查看函数或模块用途的详细说明
  • issubclass(),判断一个类是不是另一个类的子类
  • hasattr(),判断对象是否包含对应属性
  • id(): 用于获取对象的内存地址
  • callable():判断对象是否可以被调用。


29、简述一下爬虫的步骤?

  • 通过url获取网站的返回数据;


30、遇到的反爬虫策略以及解决方法?

  • 基于用户行为的反爬虫(封IP):可以使用多个代理IP爬取或者将爬取的频率降低。
  • 对部分数据加密处理(数据乱码):找到加密方法进行逆向推理。

常见的反爬虫和应对方法有:

  • 基于用户行为,同一个ip段时间多次访问同一页面 利用代理ip,构建ip池
  • 请求头里的user-agent 构建user-agent池(操作系统、浏览器不同,模拟不同用户)
  • 动态加载(抓到的数据和浏览器显示的不一样),js渲染 模拟ajax请求,返回json形式的数据
  • 加密参数字段 会话跟踪【cookie】 防盗链设置【Referer】
}

可变对象存的是地址,地址不变,但地址指向的值可以变(引用类型)。类型:list、dict、set等

不可变对象直接存值,值变了,就是另一个对象了(值类型)。int、float、tuple、string等

直接赋值,浅拷贝,深拷贝

在含有可变对象讨论这个问题更显得有意义。

直接赋值:直接传递对象的引用。浅拷贝,没有拷贝子对象,所以原始数据改变,子对象会改变。深拷贝,原始对象的改变不会造成深拷贝里任何子元素的改变。

__new__控制新实例的生成,__init__初始化一个新实例。可以用__new__实现单例模式。

大话设计的工厂、代理、单例、观察者...... 。想起了这篇文章 

列表推导一下子生成完了列表,免去以后计算的时间,提高了性能,浪费了内存。而生成表达式延迟了列表的生成时间,需要它才一个个生成出来,节省了内存,降低了性能。

装饰器就是把函数包装一下,为函数添加一些附加功能,装饰器就是一个函数,参数为被包装的函数,返回包装后的函数。

如果装饰器和被装饰的函数还有其他参数呢(也可以问如果在函数之后再进行装饰,该如何做)?

再包装一层 (个人觉得这里说得通俗易懂

使用装饰器实现单例模式的代码

使用装饰器和使用其他方法实现单例区别?

未能找到比较好的解答,求推荐。感觉这篇写得不错

邮箱前缀允许中文、英文、数字 ,中间必须有@符号 ,最后必须是域名 域名名称 只可以是英文和符号_ -的组合。(题外话:没必要太纠结邮箱格式,邮箱格式一直都在变,以前不许有中文,现在都允许有了)

( 随意看看: ^表示开始,$表示结束。[ 标记匹配字符表达式的开始,] 标记匹配字符表达式的结束。

+表示匹配前面表达式的字符要出现一个或多个,\表示转义。( 和 )分别标记子表达式的开始和结束。)

多线程之间可以共享资源,多进程各自独占资源。

CPU密集型适用多进程还是多线程?

多进程,原因:要提高CPU密集型操作效率,任务同时进行的数量尽可能等于CPU的核心数,使用多线程,也不能并行运算。

内存管理(或垃圾回收):引用计数/孤立引用环 /分代回收

指向该对象的引用总数为引用计数,对象之间相互引用形成了孤立引用环。

当某一代对象经历过垃圾回收,依然存活,那么它就被归入下一代对象,分代回收使得存活越就的对象越迟被回收。这篇内存管理讲得不错

消息队列、信号量、管道、socket等

什么是协程?为什么比线程快?

一种程序组件,比线程快其一因为没有线程上下文切换的开销。

}

如果题目里的代码是你从编辑器里复制过来的话,那我只能说错误太多了……

1. input("请输入带温度表示符号的温度值(例如: 32C):")的右括号你打成中文括号了

3. 双引号是",不是两个单引号'

正确的在底下,自己对照吧…太不认真了。

}

我要回帖

更多关于 Python运行不了 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信