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

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

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

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更新)

相关推荐

oracle数据导入导出_oracle数据导入导出工具

关于oracle的数据导入导出,这个功能的使用场景,一般是换服务环境,把原先的oracle数据导入到另外一台oracle数据库,或者导出备份使用。只不过oracle的导入导出命令不好记忆,稍稍有点复杂...

继续学习Python中的while true/break语句

上次讲到if语句的用法,大家在微信公众号问了小编很多问题,那么小编在这几种解决一下,1.else和elif是子模块,不能单独使用2.一个if语句中可以包括很多个elif语句,但结尾只能有一个...

python continue和break的区别_python中break语句和continue语句的区别

python中循环语句经常会使用continue和break,那么这2者的区别是?continue是跳出本次循环,进行下一次循环;break是跳出整个循环;例如:...

简单学Python——关键字6——break和continue

Python退出循环,有break语句和continue语句两种实现方式。break语句和continue语句的区别:break语句作用是终止循环。continue语句作用是跳出本轮循环,继续下一次循...

2-1,0基础学Python之 break退出循环、 continue继续循环 多重循

用for循环或者while循环时,如果要在循环体内直接退出循环,可以使用break语句。比如计算1至100的整数和,我们用while来实现:sum=0x=1whileTrue...

Python 中 break 和 continue 傻傻分不清

大家好啊,我是大田。...

python中的流程控制语句:continue、break 和 return使用方法

Python中,continue、break和return是控制流程的关键语句,用于在循环或函数中提前退出或跳过某些操作。它们的用途和区别如下:1.continue(跳过当前循环的剩余部分,进...

L017:continue和break - 教程文案

continue和break在Python中,continue和break是用于控制循环(如for和while)执行流程的关键字,它们的作用如下:1.continue:跳过当前迭代,...

作为前端开发者,你都经历过怎样的面试?

已经裸辞1个月了,最近开始投简历找工作,遇到各种各样的面试,今天分享一下。其实在职的时候也做过面试官,面试官时,感觉自己问的问题很难区分候选人的能力,最好的办法就是看看候选人的github上的代码仓库...

面试被问 const 是否不可变?这样回答才显功底

作为前端开发者,我在学习ES6特性时,总被const的"善变"搞得一头雾水——为什么用const声明的数组还能push元素?为什么基本类型赋值就会报错?直到翻遍MDN文档、对着内存图反...

2023金九银十必看前端面试题!2w字精品!

导文2023金九银十必看前端面试题!金九银十黄金期来了想要跳槽的小伙伴快来看啊CSS1.请解释CSS的盒模型是什么,并描述其组成部分。...

前端面试总结_前端面试题整理

记得当时大二的时候,看到实验室的学长学姐忙于各种春招,有些收获了大厂offer,有些还在苦苦面试,其实那时候的心里还蛮忐忑的,不知道自己大三的时候会是什么样的一个水平,所以从19年的寒假放完,大二下学...

由浅入深,66条JavaScript面试知识点(七)

作者:JakeZhang转发链接:https://juejin.im/post/5ef8377f6fb9a07e693a6061目录...

2024前端面试真题之—VUE篇_前端面试题vue2020及答案

添加图片注释,不超过140字(可选)...

今年最常见的前端面试题,你会做几道?

在面试或招聘前端开发人员时,期望、现实和需求之间总是存在着巨大差距。面试其实是一个交流想法的地方,挑战人们的思考方式,并客观地分析给定的问题。可以通过面试了解人们如何做出决策,了解一个人对技术和解决问...