Python 在函数参数中传递元组
Python pass tuple in function argument
我正在尝试将此代码转换为 python
function foo(int[] x, int a, int b, int i, int j) returns int
int k = j
int ct = 0
while k > i-1
if x[k] <= b and not (x[k] <= a)
ct = ct + 1
end
k = k - 1
end
return ct
end
int[] x = [11,10,10,5,10,15,20,10,7,11]
print(foo(x,8,18,3,6))
print(foo(x,10,20,0,9))
print(foo(x,8,18,6,3))
print(foo(x,20,10,0,9))
print(foo(x,6,7,8,8))
转换为python:
import pandas as pd
def foo(*x,a,b,i,j):
ct = 0
for k in x:
k = j,
ct = 0,
while k > (i-1):
if x[k] <b and ~(x[k]<=a):
ct = ct+1
else:
k = k-1
return ct
x = (11,10,10,5,10,15,20,10,7,11)
我看到第一个代码中的 int[] x
转换为 python 中的元组。但是,在函数 foo
.
中将元组作为参数传递时,我遇到了代码转换问题
行尾 k=j,
您使用 ','
此代码将 k
转换为 tuple
并在 while k > (i-1)
中得到 error
因为您用 int
.
检查 tuple
我转换为 python
,如下所示:
def foo(x, a, b, i, j):
k = j
ct = 0
while k > i-1:
if x[k] <= b and not (x[k] <= a):
ct = ct + 1
k = k - 1
return ct
x = (11,10,10,5,10,15,20,10,7,11)
print(foo(x,8,18,3,6))
print(foo(x,10,20,0,9))
print(foo(x,8,18,6,3))
print(foo(x,20,10,0,9))
print(foo(x,6,7,8,8))
输出:
2
4
0
0
1
如果可能,不要使用带有大量参数的位置参数,而是使用 kwargs,例如foo(x=(1,2,3), a=4, b=5, i=6, j=7)
如果您打算将它们混合或将其拆分为明显且基于关键字的位置,这些位置不遵循或不遵循相同的类型(对您来说是元组),否则交换参数只是时间问题或通过不正确地解包值导致不同类型的混乱。
例如:
def foo(a: int, b: int, /, values: tuple, length: int = 1, start: int = 0) -> int:
k = start
ct = 0
while k > length - 1:
if x[k] <= b and not (x[k] <= a):
ct = ct + 1
k = k - 1
return ct
/
拆分仅位置参数(a
、b
因为我无法真正弄清楚它们在该函数中的含义)和可选的关键字参数可以也作为位置传递:
foo(100, 200, values=(9, 8, 7), length=1, start=0)
# 0
foo(100, 200, (9, 8, 7), 1, 0)
# 0
此外,Python 不强制类型,因此如果您的代码依赖于此,请使用 MyPy
for static analysis and ensure.ensure_annotations
decorator 动态代码(例如在测试或应用程序中)。
您已经有了一个可以接受的答案,但有时通过使用 pythonic 方式编写函数可以使一切更容易理解。
"我们要统计(求和)索引i
和j
之间大于a
且小于或的x
的元素个数等于b
”,因此变成:
from typing import Sequence
def foo(x: Sequence[int], a: int, b: int, i: int, j: int) -> int:
return sum(a < v <= b for v in x[i:j])
我正在尝试将此代码转换为 python
function foo(int[] x, int a, int b, int i, int j) returns int
int k = j
int ct = 0
while k > i-1
if x[k] <= b and not (x[k] <= a)
ct = ct + 1
end
k = k - 1
end
return ct
end
int[] x = [11,10,10,5,10,15,20,10,7,11]
print(foo(x,8,18,3,6))
print(foo(x,10,20,0,9))
print(foo(x,8,18,6,3))
print(foo(x,20,10,0,9))
print(foo(x,6,7,8,8))
转换为python:
import pandas as pd
def foo(*x,a,b,i,j):
ct = 0
for k in x:
k = j,
ct = 0,
while k > (i-1):
if x[k] <b and ~(x[k]<=a):
ct = ct+1
else:
k = k-1
return ct
x = (11,10,10,5,10,15,20,10,7,11)
我看到第一个代码中的 int[] x
转换为 python 中的元组。但是,在函数 foo
.
行尾 k=j,
您使用 ','
此代码将 k
转换为 tuple
并在 while k > (i-1)
中得到 error
因为您用 int
.
tuple
我转换为 python
,如下所示:
def foo(x, a, b, i, j):
k = j
ct = 0
while k > i-1:
if x[k] <= b and not (x[k] <= a):
ct = ct + 1
k = k - 1
return ct
x = (11,10,10,5,10,15,20,10,7,11)
print(foo(x,8,18,3,6))
print(foo(x,10,20,0,9))
print(foo(x,8,18,6,3))
print(foo(x,20,10,0,9))
print(foo(x,6,7,8,8))
输出:
2
4
0
0
1
如果可能,不要使用带有大量参数的位置参数,而是使用 kwargs,例如foo(x=(1,2,3), a=4, b=5, i=6, j=7)
如果您打算将它们混合或将其拆分为明显且基于关键字的位置,这些位置不遵循或不遵循相同的类型(对您来说是元组),否则交换参数只是时间问题或通过不正确地解包值导致不同类型的混乱。
例如:
def foo(a: int, b: int, /, values: tuple, length: int = 1, start: int = 0) -> int:
k = start
ct = 0
while k > length - 1:
if x[k] <= b and not (x[k] <= a):
ct = ct + 1
k = k - 1
return ct
/
拆分仅位置参数(a
、b
因为我无法真正弄清楚它们在该函数中的含义)和可选的关键字参数可以也作为位置传递:
foo(100, 200, values=(9, 8, 7), length=1, start=0)
# 0
foo(100, 200, (9, 8, 7), 1, 0)
# 0
此外,Python 不强制类型,因此如果您的代码依赖于此,请使用 MyPy
for static analysis and ensure.ensure_annotations
decorator 动态代码(例如在测试或应用程序中)。
您已经有了一个可以接受的答案,但有时通过使用 pythonic 方式编写函数可以使一切更容易理解。
"我们要统计(求和)索引i
和j
之间大于a
且小于或的x
的元素个数等于b
”,因此变成:
from typing import Sequence
def foo(x: Sequence[int], a: int, b: int, i: int, j: int) -> int:
return sum(a < v <= b for v in x[i:j])