为什么Python允许str与int相乘? - python

假设我们定义一个函数如下:

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__

在返回'Response'(Python)中传递多个参数 - python

我在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…