python入门(六)——运算符和常用工具

按说应该接着介绍字符串的,不过想到运算符似乎漏掉了,还是先补一下了吧,顺便说说一些常用的内置函数。

运算符

关于运算符,最好可以看看operator模块,你可以import operator,然后help(operator)看看,帮助文件太长我就不贴,不过可以做一些总结,符号之后,我都给出operator模块给出的官方名称。

数字的四则运算

  • +,add
  • -,sub
  • *,mul
  • /,truediv

其中,最后一个除法叫做truediv,这个运算符给出除法的准确结果,无论是整数还是小数。相对的,还有一个算符

  • //,floordiv

这个除法给出带余除法的结果,最后结果是整数,不管做运算的是整数还是小数,比如

>>> 234 // 10
23
>>> 24.3 // 12
2.0

反正python就是把除法搞成了这两个,都算载四则运算之内吧。有带余除法自然有取模

  • %,mod
>>> 24.3 % 12.1
0.10000000000000142

取模对整数成立自不必说,对于小数也成立,也是很奇葩。(后面的一大串小数就是我前面提到的,实数的表示不可能是精确的,看起来这个精确度也很高了,所以不要太在意,如果你的机器结果和我不同,也不要惊讶,不同的机器实数表示也有可能有误差。)

  • **,pow。乘方,不用多说
  • -,neg。加在前面,-a表示a的负数
  • +,pos。加在前面,+a就是a,虽然没有意义,但是数学上应该允许存在

整数运算

前面讲整数再计算上的二进制表示的时候说到了,就不一一举例,仅给出名称

  • &,and_。位与,由于and是python关键字,所以名称变成了and_
  • |,or_。位或,or也是关键字
  • ^,xor。位异或
  • ~,inv或者invert
  • <<,lshift,左位移
  • >>,rshift,右位移

奇葩

  • @matmul

没想到吧,还有这么一个运算符,我也是写本文看看help(operator)才发现的,查了一下,这是PEP465引入的。

正如你所见,名称matmul翻译过来就是矩阵乘法。不过目前还没有任何python的内置类型可以使用这个运算符,不过你可以使用运算符重载(之后会专门讲)使得你自定义的类型可以支持这个算符。就我所知,numpy模块的ndarray是支持的。

上述的所有二元运算符,都可以加上等于号变成运算赋值算符

比如a += b等价于a = a + b,也就是先计算a + b的值然后赋值给a。举一反三,a **= b, a @= b是什么意思应该都很不用说了。

字符串的运算符

  • +, concat

就是把两段字符串接在一起,比如

>>> "hello" + " " + "world"
'hello world'
  • *,这个似乎并没有专门提出来(没有像concat一样另取一个名字),不过对于字符串或者是列表都是可以的,比如
>>> '12' * 5
'1212121212'
>>> [2, 3] * 3
[2, 3, 2, 3, 2, 3]

逻辑运算符

  • ==,eq。等于
  • !=,neq。不等于
  • >,gt。大于
  • <,lt。小于
  • >=,ge。大于等于
  • <=,le。小于等于
  • not,not_。逻辑非

和位非不一样,逻辑上的非作用域逻辑变量,把True变成False,把False变成True,仅此而已。

其他

  • del,delitem

del严格来说算是关键字吧,不过其意义是删除某个变量,比如

>>> a = 100
>>> del a
>>> a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined

它也可以用来删除列表中的某一个元素

>>> a = [1, 2, 3]
>>> del a[1]
>>> a
[1, 3]
  • in,containsb in a表示operator.contains(a, b)

in也是一个关键字,b in a返回一个逻辑变量,如果单元b在列表或元组a中,或者字符串b在字符串a中就返回True,否则为False

  • setitem,这是一个函数,operator.setitem(a, b, c)等价于
    a[b] = c,也就是给列表a的索引值为b的量赋值为c

  • index,这是为了索引准备的operator.index(a)等价于a.__index__()。而__index__()函数只有能够作为索引的类型才能够定义,这是为了防止传给索引的值是小数或者其他类型。对初学者并不重要,具体看PEP357

  • abs,operator模块还把这个函数写进来了,就是求绝对值,这个是内置函数,不用到math模块里面去找。并且这个内置的abs函数也支持复数求绝对值(长度)。

内置工具

  • print(),输出函数

初学者,要想在运行脚本的时候看到输出,就是和这个函数打交道了,print函数是变长参数的,可以指定分隔符,结束符等,具体看help(print)

  • input(),输入函数

有输出,当然要有输入,输入的作用是在程序运行的时候,输入一些未定的参数。

>>> s = input()
你好
>>> s
'你好'

注意,上面第二行那个你好是我自己输入的,你也可以输入别的东西。input()获取的变量是字符串,就算你输入的全部是数字,得到的变量类型也是字符串,不过你可以使用类型转换变成数字

>>> s = input()
1234567
>>> s
'1234567'
>>> type(s)
<class 'str'>
>>> int(s)
1234567

input()还可以指定一个参数作为输入前的提示,比如

>>> s = input("请输入你的名字:")
请输入你的名字:Alice

前面的请输入你的名字:这些是已经打印出来的,我只需要输入Alice就好了。

  • type()和类型转换

type()作用是显示变量的类型,我们已经说过,每一个变量都有类型,函数也是有类型的。

>>> type(1)
<class 'int'>
>>> type(print)
<class 'builtin_function_or_method'>
>>> type(type)
type

其实type不是一个函数,而是一个类函数的类型,你可以help(type)看看,不过当作函数也没关系。

而类型之间有可能可以相互转换,但是也可能不行,比如intfloat之间自然是可以转换的,字符"12.3"可以转化为数字,但是"hello"自然就不可以转化。类型转化,直接使用类型名作为函数就好了,只是转换不了就会报错。

>>> complex('1+3j')
(1+3j)
>>> str(2**10)
'1024'
>>> int('12.3')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '12.3'
  • dir()函数
>>> import operator
>>> dir(operator)
['__abs__', '__add__', '__all__', '__and__', '__builtins__', '__cached__', '__concat__', '__contains__', '__delitem__', '__doc__', '__eq__', '__file__', '__floordiv__', '__ge__', '__getitem__', '__gt__', '__iadd__', '__iand__', '__iconcat__', '__ifloordiv__', '__ilshift__', '__imatmul__', '__imod__', '__imul__', '__index__', '__inv__', '__invert__', '__ior__', '__ipow__', '__irshift__', '__isub__', '__itruediv__', '__ixor__', '__le__', '__loader__', '__lshift__', '__lt__', '__matmul__', '__mod__', '__mul__', '__name__', '__ne__', '__neg__', '__not__', '__or__', '__package__', '__pos__', '__pow__', '__rshift__', '__setitem__', '__spec__', '__sub__', '__truediv__', '__xor__', '_abs', 'abs', 'add', 'and_', 'attrgetter', 'concat', 'contains', 'countOf', 'delitem', 'eq', 'floordiv', 'ge', 'getitem', 'gt', 'iadd', 'iand', 'iconcat', 'ifloordiv', 'ilshift', 'imatmul', 'imod', 'imul', 'index', 'indexOf', 'inv', 'invert', 'ior', 'ipow', 'irshift', 'is_', 'is_not', 'isub', 'itemgetter', 'itruediv', 'ixor', 'le', 'length_hint', 'lshift', 'lt', 'matmul', 'methodcaller', 'mod', 'mul', 'ne', 'neg', 'not_', 'or_', 'pos', 'pow', 'rshift', 'setitem', 'sub', 'truediv', 'truth', 'xor']
>>> dir(int)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
>>> dir(print)
['__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__text_signature__']

dir()函数可以查看某个变量的所有属性,这些属性有可能是变量,有可能是函数。对于一个陌生的模块或者类型,你可以在交互式下先dir一下看看,会有不少的发现,help是一个详细的介绍,dir可以看作是一种摘要,比较简略,但是也可以看出很多信息。

  • help()

help()也不是函数,用help(help)看看吧。顺带一提,help(something)太长,可以按q结束。
对于一般的变量,直接help(something)help('something')是一样的,不过help也可以用来查看关键字的用法,这个时候就必须用字符串而不是变量名了比如help('if')

  • import this
    在交互式环境下,输入import this会自动打印一首小诗,这叫做python之禅,如果你看英文有点吃力,可以百度一下翻译,这首小诗表明了python的设计思想和风格。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值