假设我们定义一个函数如下:
def multiply(a, b):
return a * b
通过传递数字来调用它显然是有效的:
In [5]: multiply(2,3)
Out[5]: 6
但是,这(令人惊讶地)可以很好地了解Python是一种强类型的语言:
In [6]: multiply('2', 3)
Out[6]: '222'
或这个
In [7]: multiply(3, '2')
Out[7]: '222'
隐式类型转换让我非常害怕。 str
类型设计决策背后的原理是什么?另一方面,在F#中,它是不允许的:
- '3' * 2;;
'3' * 2;;
------^
/Users/Pac/stdin(14,7): error FS0001: The type 'int' does not match the type 'char'
参考方案
没有进行类型转换,但是字符串类型具有许多操作,这些操作提供了有用的快捷方式,当您考虑它时,它们是很合逻辑的:
乘以*
=复制为'abcd ' * 4
-> 'abcd abcd abcd abcd '
添加+
=串联,这样'abcd' + 'efg'
-> 'abcdefg'
但'abcd' + 3
-> TypeError: cannot concatenate 'str' and 'int' objects
找出任何给定类型可用的操作的技巧,除了阅读手册dir(x)
和help(x)
之外,其中x是该类型的实例,因此:
dir('a')
__add__, __class__, __contains__, __delattr__, __doc__, __eq__, __format__,
__ge__, __getattribute__, __getitem__, __getnewargs__, __getslice__, __gt__,
__hash__, __init__, __le__, __len__, __lt__, __mod__, __mul__, __ne__, __new__,
__reduce__, __reduce_ex__, __repr__, __rmod__, __rmul__, __setattr__,
__sizeof__, __str__, __subclasshook__, _formatter_field_name_split, _formatter_parser,
capitalize, center, count, decode, encode, endswith, expandtabs, find, format, index,
isalnum, isalpha, isdigit, islower, isspace, istitle, isupper, join, ljust,
lower, lstrip, partition, replace, rfind, rindex, rjust, rpartition, rsplit, rstrip,
split, splitlines, startswith, strip, swapcase, title, translate, upper, zfill
如您所见,其中包含用于加法和乘法的运算符__add__
和__mul__
。
我在Angular工作,正在使用Http请求和响应。是否可以在“响应”中发送多个参数。角度文件:this.http.get("api/agent/applicationaware").subscribe((data:any)... python文件:def get(request): ... return Response(seriali…
R'relaimpo'软件包的Python端口 - python我需要计算Lindeman-Merenda-Gold(LMG)分数,以进行回归分析。我发现R语言的relaimpo包下有该文件。不幸的是,我对R没有任何经验。我检查了互联网,但找不到。这个程序包有python端口吗?如果不存在,是否可以通过python使用该包? python参考方案 最近,我遇到了pingouin库。
如何用'-'解析字符串到节点js本地脚本? - python我正在使用本地节点js脚本来处理字符串。我陷入了将'-'字符串解析为本地节点js脚本的问题。render.js:#! /usr/bin/env -S node -r esm let argv = require('yargs') .usage('$0 [string]') .argv; console.log(argv…
Python:传递记录器是个好主意吗? - python我的Web服务器的API日志如下:started started succeeded failed 那是同时收到的两个请求。很难说哪一个成功或失败。为了彼此分离请求,我为每个请求创建了一个随机数,并将其用作记录器的名称logger = logging.getLogger(random_number) 日志变成[111] started [222] start…
Python-Excel导出 - python我有以下代码:import pandas as pd import requests from bs4 import BeautifulSoup res = requests.get("https://www.bankier.pl/gielda/notowania/akcje") soup = BeautifulSoup(res.cont…