Python与其他语言的差异、代码风格、运算符与表达式和常用的内置函数(更新中)

Python学习笔记

Python是一门跨平台、开源、免费的解释型高级动态编程语言。
Python支持命令式编程(How to do)、函数式编程(What to do),完全支持面向对象程序设计,拥有大量扩展库。
胶水语言 :可以把多种不同语言编写的程序融合到一起实现无缝拼接,更好地发挥不同语言和工具的优势,满足不同应用领域的需求。

python和其他语言之间的小差异

  • 注释格式不同:在Python中使用#进行单行注释或者使用一对 ′ ′ ′ ′ ′ ′ ′ ′ ′ ′ ′ ′ ''''''\quad'''''' 进行整段注释;与之相对的,C/C++语言使用 / / // //进行单行注释或者使用一对/* \quad */ 进行整段注释;Matlab中使用%进行注释或者直接选中整段要注释的部分单击注释按钮。
  • 解释型语言:python程序不需要像C/C++一样经过编译后运行,可以直接一行一行运行,因此也可以在命令行中进行直接的交互。但是这样带来的缺点就是运行速度比较慢。
  • 面向对象:在Python中创建一个类和对象是很容易的,同时因为python有很好的BIF方法(Built in Function),使得在使用对象的时候也很方便。

基本入门知识

代码风格

  • 变量名, 方法名和模块名建议小写, 单词以 _ 分割, 类名建议驼峰命名风格, 首字母大写, 私有类可用一个 _ 开头;
  • 每行结尾尽量不要添加 ;, 多行代码也不要写在一行;
  • 尽量不要写过长的语句。如果语句过长,可以考虑拆分成多个短一些的语句,以保证代码具有较好的可读性。如果语句确实太长而超过屏幕宽度,最好使用续行符(line continuation character)“\”,或者使用圆括号将多行代码括起来表示是一条语句;
  • python 是以缩进来控制代码段的,类定义、函数定义、选择结构、循环结构、with块,行尾的冒号表示缩进的开
    始。缩进结束就表示一个代码块结束了。 一般缩减建议使用 4 个空格(一个tab);
  • 编码尽量使用 utf-8, python 默认使用 ASCII, 所以要在文件的开头添加 # -- coding: UTF-8 -- 或者 #coding=utf-8 来指定;
  • 如果一个类不从其他类继承, 就显示的从 object 类继承;
  • 使用 with 语句来管理文件, 如 open 或 close;
  • 添加 TODO 时, 尽量在其后紧跟 (), 在里面写明作者名或 email 等其他标识信息, 然后紧跟一个 : 后面接着写要做的事情;
  • 每个导入模块都占一行, 不要一行导入多个模块;
  • 尽量定义一个 main 函数, 将主程序放入其中, 并在 “if name = ‘_ main _’:” 成立时执行main, 这样被当作模块导入时就不会执行主程序。

内置对象

数据在python内部是以对象的方式存储的,对象是python语言中最基本的概念,包括数据和处理数据的方法。在python中处理的一切都是对象,python的对象包括但不限于:数字、字符串、列表、函数、文件、异常、类的实例等等。
常用的内置对象
常用内置对象
Python 是强类型编程语言也是动态语言, 变量的类型不固定, 根据值的类型而决定, Python解释器会根据赋值或运算来自动推
断变量类型,所以不用显示的声明变量, 用的时候直接赋值即可,如下:

a = 1 // 此时是整型
a = 'hello' // 此时又为字符串类型

Python中的变量并不直接存储值,而是存储了值的内存地址或者引用,这也是变量类型随时可以改变的原因。
通常变量名全部大写的为 常量, 空值 用 None 表示.
以 _xxx 或 __xxx 命名的函数或变量是私有变量, 不能被其他模块直接引用。

在这里插入图片描述

Python运算符与表达式

Python是面向对象的编程语言,在Python中一切都是对象。对象由数据和行为两部分组成,而行为主要通过方法来实现,通过一些特殊方法的重写,可以实现运算符重载。运算符也是表现对象行为的一种形式,不同类的对象支持的运算符有所不同,同一种运算符作用于不同的对象时也可能会表现出不同的行为,这正是“多态”的体现。
在Python中,单个常量或变量可以看作最简单的表达式,使用除赋值运算符之外的其他任意运算符和函数调用连接的式子也属于表达式。

常用运算符

在这里插入图片描述

  • 运算符优先级遵循的规则 为:算术运算符优先级最高,其次是位运算符、成员测试运算符、关系运算符、逻辑运算符等,算术运算符遵循“先乘除,后加减”的基本运算原则。
  • 虽然Python运算符有一套严格的优先级规则,但是强烈建议在编写复杂表达式时使用圆括号来明确说明其中的逻辑来提高代码可读性。

Python关系运算符常用于比较大小,且可以连用,其含义与我们日常的理解完全一致。使用关系运算符的最重要的前提是:操作数之间必须可比较大小。例如把一个字符串和一个数字进行大小比较是毫无意义

>>> 1 < 3 < 5 #等价于1 < 3 and 3 < 5
True
>>> 3 < 5 > 2
True
>>> 1 > 6 < 8
False
>>> 1 > 6 < math.sqrt(9) #具有惰性求值或者逻辑短路的特点
False
>>> 1 < 6 < math.sqrt(9) #还没有导入math模块,抛出异常
NameError: name 'math' is not defined
>>> import math
>>> 1 < 6 < math.sqrt(9)
False
  • 成员测试运算符in与同一性测试运算符is
    成员测试运算符in用于成员测试,即测试一个对象是否为另一个对象的元素。
>>> 5 in range(1, 10, 1) #range()是用来生成指定范围数字的内置函数
True
>>> 'abc' in 'abcdefg' #子字符串测试
True
>>> for i in (3, 5, 7): #循环,成员遍历
print(i, end='\t')
3 5 7

同一性测试运算符is用来测试两个对象是否是同一个,如果是则返回True,否则返回False。如果两个对象是同一个,二者具有相同的id,可利用内置函数id()查看对象的id。

>>> x = [300, 300, 300]
>>> x[0] is x[1] #基于值的内存管理,同一个值在内存中只有一份
True
>>> x = [1, 2, 3]
>>> y = [1, 2, 3]
>>> x is y #上面形式创建的x和y不是同一个列表对象
False
>>> x[0] is y[0]
True
逻辑运算符
  • 逻辑运算符and、or、not常用来连接条件表达式构成更加复杂的条件表达式,并且and和or具有惰性求值或逻辑短路的特点,当连接多个表达式时只计算必须要计算的值。
  • 例如表达式“exp1 and exp2”等价于“exp1 if not exp1 else exp2”,而表达式“exp1 or exp2”则等价于“exp1 if exp1 else exp2”。
  • 在编写复杂条件表达式时充分利用这个特点,合理安排不同条件的先后顺序,在一定程度上可以提高代码运行速度。
  • 另外要注意的是,运算符and和or并不一定会返回True或False,而是得到最后一个被计算的表达式的值,但是运算符not一定会返回True或False
>>> 3>5 and a>3 #注意,此时并没有定义变量a
False
>>> 3>5 or a>3 #3>5的值为False,所以需要计算后面表达式
NameError: name 'a' is not defined
>>> 3<5 or a>3 #3<5的值为True,不需要计算后面表达式
True
>>> 3 and 5 #最后一个计算的表达式的值作为整个表达式的值
5
>>> 3 or 5 #最后一个计算的表达式的值作为整个表达式的值
3
>>> 3 and 5>2
True
>>> 3 not in [1, 2, 3] #逻辑非运算not
False
>>> 3 is not 5 #not的计算结果只能是True或False之一
True
>>> not 3
False
>>> not 0
True

值得注意的是:Python不支持**++和–运算符**,虽然在形式上有时候似乎可以这样用,但实际上是另外的含义,要注意和其他语言的区别。

>>> i = 3
>>> ++i #正正得正
3
>>> +(+3) #与++i等价
3
>>> i++ #Python不支持++运算符,语法错误
SyntaxError: invalid syntax
>>> --i #负负得正,等价于-(-i)
3
>>> ---i #等价于-(-(-i))
-3
>>> i-- #Python不支持--运算符,语法错误
SyntaxError: invalid syntax

一些常用的内置函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • input()和print()是Python的基本输入输出函数,前者用来接收用户的键盘输入,后者用来把数据以指定的格式输出到标准控制台或指定的文件对象。值得注意的是:不论用户输入什么内容,input()一律返回字符串,必要的时候可以使用内置函数int()、float()或eval()对用户输入的内容进行类型转换。
  • range()是Python开发中非常常用的一个内置函数,语法格式为range([start,] end [, step] ),有range(stop)、range(start, stop)和
    range(start, stop, step)三种用法。该函数返回具有惰性求值特点的range对象,其中包含**左闭右开区间[start,end)**内以step为步长的整数。参数start默认为0,step默认为1。
map()

内置函数map()把一个函数func依次映射到序列或迭代器对象的每个元素上,并返回一个可迭代的map对象作为结果,map对象中每个元素是原序列中元素经过函数func处理后的结果。

>>> list(map(str, range(5))) #把列表中元素转换为字符串
['0', '1', '2', '3', '4']
>>> def add5(v): #单参数函数
return v+5
>>> list(map(add5, range(10)))#把单参数函数映射到一个序列的所有元素
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
>>> def add(x, y): #可以接收2个参数的函数
return x+y
>>> list(map(add, range(5), range(5,10)))
#把双参数函数映射到两个序列上
[5, 7, 9, 11, 13]
filter()

内置函数filter()将一个单参数函数作用到一个序列上,返回该序列中使得该函数返回值为True的那些元素组成的filter对象,如果指定函数为None,则返回序列中等价于True的元素。

>>> seq = ['foo', 'x41', '?!', '***']
>>> def func(x):
return x.isalnum() #测试是否为字母或数字
>>> filter(func, seq) #返回filter对象
<filter object at 0x000000000305D898>
>>> list(filter(func, seq)) #把filter对象转换为列表
['foo', 'x41']
zip()

zip()函数用来把多个可迭代对象中的元素压缩到一起,返回一个可迭代的zip对象,其中每个元素都是包含原来的多个可迭代对象对应位置上元素的元组,如同拉拉链一样。

>>> list(zip('abcd', [1, 2, 3])) #压缩字符串和列表
[('a', 1), ('b', 2), ('c', 3)]
>>> list(zip('123', 'abc', ',.!')) #压缩3个序列
[('1', 'a', ','), ('2', 'b', '.'), ('3', 'c', '!')]
>>> x = zip('abcd', '1234')
>>> list(x)
[('a', '1'), ('b', '2'), ('c', '3'), ('d', '4')]

更新于2019年11月22日

待更

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值