Python学习笔记

最近在学习python,分享部分笔记。

1.python是动态类型语言,而Java是静态类型语言。语言python无需给任何变量指定数据类型,而Java需要在声明变量数据类型之后才能使用。(这边值得注意的是,函数参数后的冒号是参数的类型建议符,告诉程序员需要传入的实参的类型,函数后面跟着的箭头是函数返回值的类型建议符,用来说明该函数返回的值是什么类型,类型建议符并非强制规定和检查,也就是说实际参数和建议参数不符,也不会报错但会有警告)

2.python中只有模块(module)、类以及函数(def、lambda)才会引入新的作用域,其他代码块(if/elif/else try/except for/while)不会引入新的作用域,也就是说这些语句中定义的变量,外部也可以访问。

作用域:python程序可以直接访问命名空间的正文区域。L(local)最内层,包含局部变量,函数/方法内部;E(enclosing)非局部也非全局变量;G(global)当前脚本最外层,比如当前模块全局变量;B(built-in)内建变量/关键字等

当内部作用域想要修改外部作用域变量,用global。修改嵌套作用域中变量,用nonlocal

3.命名空间,从名称到对象的映射,提供了项目中避免名字冲突的一个方法,大多数命名空间都是通过python字典来实现的。

三种命名空间:内置名称、全局名称,局部名称。若要用变量star,查找顺序是局部到全局再到内置,找不到的话,放弃查找,报nameerror异常。

命名空间的生命周期取决于对象作用域,如果对象执行完成,该命名空间的生命周期结束,因此无法从外部命名空间访问内部命名空间的对象。

4.python函数的return可以返回任意类型,也就是说python函数没有固定返回类型。而Java中只能返回特定的类型。

python函数有默认参数,java方法没有默认参数

python中用冒号加四个字符缩进来组织代码,java中用大括号

python中用str()或repr()实现对象的序列化,而java中使用toString()(对象的序列化:将对象状态信息转换为可以存储或传输的形式的过程)

5.python模块是包含python代码的.py文件,此代码可是函数类或变量,一般常用内置模块sys random math datatime JSON

Pickle模块接受任何python对象,并将其转换为字符串表示形式,并使用dump函数将其转储到文件中,此过程叫pickling,从存储字符串中检索原始python对象过程叫unpickling

6.python中六个基本数据类型,number(数字)string(字符串)tuple(元祖)list(列表)set(集合)dictionary(字典),前三个是不可变类型。

     number:int float bool complex 

     list:append extend pop remove reverse sort 

     tuple元组中的元素类型可以不同

     set:无序不重复元素的序列,用大括号或者set()函数来创建集合

     dictionary:字典每个元素都是键值对,无序的对象集合;key必须是不可变对象;字典是可变容器模型,可存任意类型对象;字典可以通过键来引用,键必须唯一,键名不可变。python内置数据类型字典,它定义了键和值之间一对一关系,字典包含一对建及其对应关系,字典由键索引。

类型转换函数 int()float()ord()hex()oct()、

type()不会认为子类是一种父类类型,isinstance()会认为子类是一种父类类型

7.python中文件操作步骤主要三个:打开、操作、关闭。open(name mode)'r' 'w' 'a'

文件夹操作,import os;os.rename 重命名;os.remove;os.listdir 获取目标列表

8.lambda又叫匿名函数,该函数可以包含任意数量的参数,但只能有一个执行操作语句

9.公共操作:运算符(+合并 *赋值 in notin)、公共方法(len del max/min range enumerater)、容器类型转换(tuple() list() set() )

len()函数用于确定字符串、列表、数组等长度,

Help()和dir()函数都可以从python解释器直接访问,并用于查看内置函数合并转储。help函数用于显示文档字符串,还可以查看与模块、关键字、属性等相关的使用信息。dir()函数用于显示定义的符号

del删除对象指向,当这个对象无任何指向的时候,python虚拟机删除对象

10.装饰器:拓展原来函数功能的一种函数,特殊之处在于它返回值也是一个函数,使用装饰器的好处在于不用更改原函数代码前提下为函数增加新功能。装饰器就像一个注入符号

11.迭代是python最强大的功能,是访问集合元素的一种方式,迭代器是一个可以记住遍历的位置的对象。迭代器由两个基本方法,iter()和next(),字符串、列表、元组对象都可以用来创建迭代器

12.在python中,使用了yield函数被称为生成器(generator),和普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解,生成器就是一个迭代器。

包含yield语句函数会特地编译成生成器,当函数被调用时,他们返回一个生成器对象这个对象支持迭代器接口,函数可能会有return语句,它的作用是用来产生值的。python使用生成器对延迟操作提供支持,所谓延迟操作,是指在需要的时候才产生结果,所以生成器有如下好处:1.节省资源消耗,和声明序列不同,生成器在不使用时候几乎不占内存2.使用时,生成器是随用随生成的,用完即释放,非常高效。

调用fab(5)不会执行fab()函数,而是返回iterable对象,在for循环执行时,每次循环都会执行fab函数内部代码。执行到yield时,fab函数就返回一个迭代值,yield在方法中类似一个return语句,方法执行到该句会暂停,再一次执行该方法,不会从该方法的第一局开始执行,而是代码从yield b下一条语句继续执行,也可以手动调用fab(5).next()方法,

生成器优点是延迟计算,一次返回一个结果,这样非常适用于大数据量计算,而列表推导是直接返回所有数据,但是使用生成器必须注意生成器只能遍历一次。

13.闭包。如果在一个内部函数里,对在外部作用域的变量进行引用,那么内部函数就被认为是闭包。1.必须有一个内嵌函数2.内嵌函数必须引用外部函数中的变量3.外部函数的返回值必须是内嵌函数(return 内嵌函数名)闭包可以认为是延伸了作用域的函数。

闭包函数和嵌套函数的区别在于闭包函数有一个closure属性(返回一个元组,每一项都是闭包函数引用的外部变量,可以通过cell-contents将被引用变量打印出来)

14.自由函数。如一个变量出现在一个代码块中,他就是这个代码块的局部变量,如一个变量被用于一个代码块中,并且没有这个代码块定义这个变量,就是自由变量。自由变量即没有在某代码块中定义,但却在这个代码块中使用,也就是引用的外部变量。

15.列表推导式:该语句类似于for循环,对列表元素进行全量遍历,按制定条件或语句对元素进行推导,利用已有列表可以快速获取新列表。用方括号表示,第一部分是生成结果列表元素的表达式,第二部分是一个输入表达式上的循环。先从for循环开始,向右查看是否有if条件,然后把推导式开始那个表达式映射到每一个匹配元素上。(生成式就是一种没有判断条件的推导式)

一般框架:[表达式for变量in列表]或者[表达式for变量in列表if条件]

为了保证代码简单易用,列表推导一般用于一层或两层循环中,只适用于于简单处理过程,过于复杂的处理流程以及多层循环的场景下,还是用for循环更易懂

16.*args代表多个无名参数,返回的是元组;**kwargs代表关键字参数,所有传入的key=value返回的字典。*args和**kwargs主要用于函数定义,可以将不定数量参数传递给一个函数。*args是用来发一个非键值对的可变数量的参数列表给一个函数。**kwargs允许将一个不定长度的键值对,作为参数传递给一个函数。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值