百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

ScalersTalk成长会Python小组第14周学习笔记

wptr33 2025-04-08 19:45 13 浏览

Scalers点评:在2015年,ScalersTalk成长会完成Python小组完成了《Python核心编程》第1轮的学习。到2016年,我们开始第二轮的学习,并且将重点放在章节的习题上。Python小组是成长会内部小组,如果你想和我们一起学习Python,你需要是成长会成员,并且完成相关进群任务。

我们的节奏是行动是一周一章学到位,章节习题都会一个一个过。通过到位地执行,达到实质性的提升。

往期日志:

本周学习情况

本周(20160425-20160501)学习第十四章,章节内容为《执行环境》。本周复盘主持人为诗耀。

本章主要内容

本章主要介绍了可调用对象和代码对象,以及支持调用执行功能的一些内建函数,提供了执行其他python程序或非python程序的方法,同时介绍了一些终止执行的方法,最后列举了一些与执行环境相关的模块。

本章主要知识点

14.1可调用对象

即能通过操作符“”来调用的对象,如:用foo来调用函数foo。

可调用对象可以作为参数,通过函数式编程接口来进行调用,如:applyfiltermapreduce

python有四种可调用对象:函数、方法、类以及一些类的实例。

函数

  • 内建函数(BIF)

    内建函数是用 c语言编写的,编译过后放入 python 解释器,作为第一(内建)名字空间的一部分加载进系统。这些函数在_bulitin_模块里,并作为__builtins__模块导入到解释器中。

    内建函数属性:

    bif.__doc__:文档字符串(或None)

    bif.__name__:字符串类型的文档名字

    bif.__self__:设置为 None(保留给 built-in方法)

    bif.__module__:存放 bif 定义的模块名字(或 None)

  • 用户定义的函数(UDF)

    定义在模块的最高级,作为全局名字空间的一部分装载到系统中。

    用def语句创建 def XX:

  • lambda表达式函数

    lambda表达式不是def语句创建的,而是用lambda关键字创建的匿名函数;

    没有命名,但是享有和用户定义函数相同的属性,其中__name__fun_name属性定为‘lambda’

    使用方法:

    • 作为参数,通过函数式编程接口来调用

    • 将其引用赋值给一个变量,再直接调用或通过函数调用

方法

方法实际上就是定义在类内部的函数

  • 内建方法(BIM)

    内建方法和内建函数两者属于相同的类型,有相同的属性,不同之处在于BIM的__self__属性指向python对象,而BIF指向None

  • 用户自定义方法(UDM)UDM包含在类定义之中,都属于实例方法,只是拥有标准函数的包装,仅有定义他们的类可以使用。如果没有在子类定义中被覆盖掉,也可以通过子类实例来调用他们。

类的调用实际上就是实例化的过程,调用类就创建了一个实例。

类的实例

一般情况下,大部分实例是不可调用的(通过函数操作符“()”),但如果在类定义中覆盖了__call__方法的话,那么该类的实例就能通过函数操作符调用了。

14.2 代码对象

  • 代码对象的定义:Python代码编译而成的字节码

  • 代码对象的执行:可以作为函数或者方法的一部分来执行,也可以用exec语句或者eval来执行。

  • 代码对象、函数对象、方法之间的关系:函数对象仅是代码对象的包装,方法则是对函数对象的包装。

14.3 可执行的对象声明和内建函数

  • callable(obj)

    判断obj是否可调用,如果 obj 可调用,返回 True,否则返回 False

  • compile

    提供一次性字节代码预编译,以后每次调用的时候都不用再编译了。运行时迅速生成代码对象,然后用exec语句或内建函数eval来执行这些对象或者对他们进行求值。

    compile(string, file, type)

    三个参数是必需的,分别对应要编译的python代码、保存代码对象的文件名(通常设为空串'')、代码对象的类型。

    类型有三种:

  • 'eval':可求值的表达式 [和eval一起使用]

    'single':单一可执行语句 [和exec一起使用]

    'exec':可执行语句组 [和exec一起使用]

  • eval

    eval(obj, globals, locals)三个参数,对表达式进行求值,第一个参数obj可以是字符串或内建函数complie创建的预编译代码对象,其他两个参数可选,代表全局和局部名字空间中的对象。

    int的区别:

    -eval接受一个字符串并作为表达式求值;

    -int只是接受代表整数的字符串并转换为整数。

  • exec

    eval类似,语法是exec obj

    exec可以执行的对象:字符串代码(如单一语句或语句组);代码对象(如compile()'single''exec'参数编译成的代码对象);文件对象

  • input

    相当于eval(raw_input),有一个可选参数,代表了给用户的字符串提示,默认为空串。

    raw_input区别是:

    -raw_input是得到字符串形式的用户输入;

    -input则是对输入表达式进行求值,将其转化为合适的类型返回。

14.4 执行其他python程序

  • 导入

    第一次导入模块会执行模块最高级的代码,如果不想每次导入都执行某些代码,那就缩进它,将其放入if __name__ == __main__内部。

# import1.py import import2 if __name__ == '__main__': print 'loaded import1' # import2.py f __name__ == '__main__' print 'loaded import2' >>>import import1 >> #不再执行print
  • execfile

    execfile(filename)执行代码文件,相当于使用exec语句读取python脚本的内容并执行

f = open(filename, 'r') exec f f.close
  • -将模块作为脚本执行

python2.4之后,允许从shell或DOS提示符直接把模块作为脚本来执行

14.5 执行其他(非Python)程序

在Python里执行非Python程序,要求是:有一个有效的执行环境;考虑python脚本是否需要和其他程序通信。本章主要是通过os系列函数来执行其他非Python程序。

  • os.system

    接收字符串形式的系统命令并执行它,执行完成之后,将会以 system的返回值形式给出退出状态(0表示成功,非0表示错误)

  • os.popen

    是文件对象和 system函数的结合,工作方式和 system相同,但它可以建立一个指向那个程序的单向连接,然后如访问文件一样访问这个程序。返回的是一个类文件对象。

  • os.fork

    创建一个新的进程,称为子进程,目的是为了运行其他程序,区分的方法是根据父进程与子进程返回值的不同,子进程返回值是0。

  • subprocess模块

    部分类可以取代os.systemos.popen

14.7 结束执行

当程序运行完成,所有模块最高级的语句执行完毕后退出,这是干净的执行。

  • sys.exit

    当调用 sys.exit时,就会引发systemExit异常,解释器会用给定的状态参数退出,该参数默认为 0。

    System Exit 是唯一不被看作错误的异常,仅表示要退出python。

  • sys.exitfunc

    默认不可用,没有参数,可以改写作为exit的一部分来执行。

  • os._exit

    不建议使用,只适用于特定的平台。

  • os.kill

    模拟传统的unix函数发送信号给进程,从而终结进程。

本章练习

14-3.执行环境。创建运行其他Python脚本的脚本。

filename = raw_input('file name: ') execfile(filename)

14-4. os.system。调用os.system运行程序。附加题:将你的解决方案移植到subprocess.call。

import os s.system('dir')

14-5. commands.getoutput。用commands.getoutput解决前面的问题。

rom commands import getoutput output = getoutput('dir') print output

14-6.popen家族。选择熟悉的系统命令,该命令从标准输入获得文本,操作或输出数据。使用os.popen与程序进行通信。

from os import popen f = popen('dir') for i in f: print i,

ScalersTalkID:scalerstalk

本微信公众号作者Scalers,游走在口译世界的IT从业者。微信公众号ScalersTalk,微博@Scalers,网站ScalersTalk.com,口译100小时训练计划群C 456036104

成长会是由Scalers发起的面向成长、实践行动,且凝聚了来自全球各地各行各业从业者的社群。有意入会者请和Scalers直接联系,我和其他会员会和你直接交流关于成长行动等各方面的经验教训。2016年成长会持续招募中,参见做能说会写的持续行动者:ScalersTalk成长会2016年会员计划介绍(2016.3更新)

相关推荐

每天一个编程技巧!掌握这7个神技,代码效率飙升200%

“同事6点下班,你却为改BUG加班到凌晨?不是你不努力,而是没掌握‘偷懒’的艺术!本文揭秘谷歌工程师私藏的7个编程神技,每天1分钟,让你的代码从‘能用’变‘逆天’。文末附《Python高效代码模板》,...

Git重置到某个历史节点(Sourcetree工具)

前言Sourcetree回滚提交和重置当前分支到此次提交的区别?回滚提交是指将改动的代码提交到本地仓库,但未推送到远端仓库的时候。...

git工作区、暂存区、本地仓库、远程仓库的区别和联系

很多程序员天天写代码,提交代码,拉取代码,对git操作非常熟练,但是对git的原理并不甚了解,借助豆包AI,写个文章总结一下。Git的四个核心区域(工作区、暂存区、本地仓库、远程仓库)是版本控制的核...

解锁人生新剧本的密钥:学会让往事退场

开篇:敦煌莫高窟的千年启示在莫高窟321窟的《降魔变》壁画前,讲解员指着斑驳色彩说:"画师刻意保留了历代修补痕迹,因为真正的传承不是定格,而是流动。"就像我们的人生剧本,精彩章节永远...

Reset local repository branch to be just like remote repository HEAD

技术背景在使用Git进行版本控制时,有时会遇到本地分支与远程分支不一致的情况。可能是因为误操作、多人协作时远程分支被更新等原因。这时就需要将本地分支重置为与远程分支的...

Git恢复至之前版本(git恢复到pull之前的版本)

让程序回到提交前的样子:两种解决方法:回退(reset)、反做(revert)方法一:gitreset...

如何将文件重置或回退到特定版本(怎么让文件回到初始状态)

技术背景在使用Git进行版本控制时,经常会遇到需要将文件回退到特定版本的情况。可能是因为当前版本出现了错误,或者想要恢复到之前某个稳定的版本。Git提供了多种方式来实现这一需求。...

git如何正确回滚代码(git命令回滚代码)

方法一,删除远程分支再提交①首先两步保证当前工作区是干净的,并且和远程分支代码一致$gitcocurrentBranch$gitpullorigincurrentBranch$gi...

[git]撤销的相关命令:reset、revert、checkout

基本概念如果不清晰上面的四个概念,请查看廖老师的git教程这里我多说几句:最开始我使用git的时候,我并不明白我为什么写完代码要用git的一些列指令把我的修改存起来。后来用多了,也就明白了为什么。gi...

利用shell脚本将Mysql错误日志保存到数据库中

说明:利用shell脚本将MYSQL的错误日志提取并保存到数据库中步骤:1)创建数据库,创建表CreatedatabaseMysqlCenter;UseMysqlCenter;CREATET...

MySQL 9.3 引入增强的JavaScript支持

MySQL,这一广泛采用的开源关系型数据库管理系统(RDBMS),发布了其9.x系列的第三个更新版本——9.3版,带来了多项新功能。...

python 连接 mysql 数据库(python连接MySQL数据库案例)

用PyMySQL包来连接Python和MySQL。在使用前需要先通过pip来安装PyMySQL包:在windows系统中打开cmd,输入pipinstallPyMySQL ...

mysql导入导出命令(mysql 导入命令)

mysql导入导出命令mysqldump命令的输入是在bin目录下.1.导出整个数据库  mysqldump-u用户名-p数据库名>导出的文件名  mysqldump-uw...

MySQL-SQL介绍(mysql sqlyog)

介绍结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统,可以使用相同...

MySQL 误删除数据恢复全攻略:基于 Binlog 的实战指南

在MySQL的世界里,二进制日志(Binlog)就是我们的"时光机"。它默默记录着数据库的每一个重要变更,就像一位忠实的史官,为我们在数据灾难中提供最后的救命稻草。本文将带您深入掌握如...