GVKun编程网logo

Python映射列表项可与参数一起使用(python 列表映射)

11

最近很多小伙伴都在问Python映射列表项可与参数一起使用和python列表映射这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展Pip已安装到python3.6,但是我在Ubunt

最近很多小伙伴都在问Python映射列表项可与参数一起使用python 列表映射这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展Pip已安装到python3.6,但是我在Ubuntu 18.04上将python3.7与VS Code一起使用、Python,如何创建一个函数,它将函数作为参数与两个数组一起使用?、python-变量与参数传递、Python映射函数,通过引用/值传递?等相关知识,下面开始了哦!

本文目录一览:

Python映射列表项可与参数一起使用(python 列表映射)

Python映射列表项可与参数一起使用(python 列表映射)

有什么方法可以将列表项与参数一起映射到函数。我有一个清单:

pages = [p1,p2,p3,p4,p5...]

而且我必须调用myFunc与每个列表元素相对应的函数以及其他参数,以便可以计算以下内容

myFunc(p1,additionalArgument)
myFunc(p2,additionalArgument)

等等…

有什么优雅的方法可以做到这一点吗?我是新手,所以请不要介意。

Pip已安装到python3.6,但是我在Ubuntu 18.04上将python3.7与VS Code一起使用

Pip已安装到python3.6,但是我在Ubuntu 18.04上将python3.7与VS Code一起使用

我是python和ubuntu的新手.我最近一直在关注一些教程,他们使用pylint来检查python代码的语法.

我已经使用“ sudo pip3 install pylint”通过终端正常安装了该文件,但是,每当我在VS Code中进行格式化时,都会出现错误消息,指出pylint不存在,我是否要安装.在尝试安装时,由于不存在pip,我收到另一个错误.

在尝试重新安装pip和pylint之后,我已经在终端中查看了,但是它将进入python3.6文件夹而不是python3.7文件夹,因此出现了错误.

有关如何解决此问题的任何想法?

点输出当前为:“来自/usr/lib / python3 / dist-packages(python 3.6)的点9.0.1”

如果我尝试使用“ python3 -m pip install pylint”通过终端安装pylint,则会出现输出错误:“ /usr/local/bin / python3:没有名为pip的模块”

最佳答案
在遵循了stovfl的建议之后,我意识到python 3需要重定向到3.7安装

我用谷歌搜索发现了这篇文章:http://ubuntuhandbook.org/index.php/2017/07/install-python-3-6-1-in-ubuntu-16-04-lts/

在第3步,它通过以下命令告诉您如何使python3使用新安装:

sudo update-alternatives –install /usr/local/bin / python3 python3 /usr/bin/python3.7 1

现在,当我安装pip和pylint时,它会定向到新的3.7文件夹.这意味着它也可以与VS Code一起使用.

Python,如何创建一个函数,它将函数作为参数与两个数组一起使用?

Python,如何创建一个函数,它将函数作为参数与两个数组一起使用?

出于学习目的,我正在尝试使用 Python创建一个函数,它接受另一个函数和两个数组作为参数,并在每个数组参数的每个索引上调用函数参数.所以这应该调用add on a1 [0]& a2 [0],a1 [1]& a2 [1],等等.但我回来的只是一个生成器对象.怎么了?

def add(a,b):
    yield a + b


def generator(add,a1,a2):
    for i in range(len(a1)):
        yield add(a1[i],a2[i])


g = generator(add,a2)

print g.next()

我也试过替换上面的产量

yield map(add,a1[i],a2[i])

但这更有效.我明白了:

TypeError: argument 2 to map() must support iteration

解决方法

你对add()的定义至少是奇怪的(我倾向于称之为“错误”).你应该返回结果,而不是产生它:

def add(a,b):
    return a + b

现在,你的generator()会起作用

map(add,a2)

是一种更容易,更快速的方法(几乎)做同样的事情. (如果需要迭代器而不是列表,请使用itertools.imap()而不是map().)

python-变量与参数传递

python-变量与参数传递

变量与参数传递

理解变量

抛弃变量是存储数据的盒子这一错误观念,

可以把python变量理解为附加在对象上的标注

来个栗子

a = [1, 2, 3]
b = a
a.append(4)
print(a, b) #[1, 2, 3, 4] [1, 2, 3, 4]
print(a is b)

 

说明:a和b引用同一个列表,而不是这个列表的副本,当为a添加一个元素时,a,b都发生改变并指向同一个列表,

很明显用变量是存储数据的盒子这一观念无法解释。

 

变量赋值

在python中,通常会说把某个变量分配给某个对象,绝不会说把某个对象分配给某个变量,因为对象在赋值之前就创建了。

a = 3

说明:对于python中的赋值语句,应该先读右边,对象在右边创建或获取,之后将左边的变量绑定到对象上,

这就像往对象上贴上标注。

 

变量只不过是标注,你无法阻止往对象上贴多个标注,贴的多个标注就是别名。

 

每个变量都有标识、类型和值,对象一旦创建它的标识就不会变,标识可以理解为对象在内存中的地址。

 

id()函数返回对象内存地址的整数表示,id是唯一的数值标识,在对象的生命周期中不会改变

标识通常用is运算符检查

==比较的是两个对象中保存的数据,

is比较的是两个对象的标识,is常用于变量与单例值之间的比较:

x is None:

x is not None:

 

变量分类

在python中,一切都是对象,变量存储的是对象的引用。

对象可以分为可变对象和不可变对象,可变与不可变是针对对象内容本身而言的。

 

对象分类 概念 包括
可变对象 对象创建后对象的内容是可以改变的 list, dict, set
不可变对象 对象创建后对象的内容是不可以改变的 bool, int, float, tuple, str, frozens

 

 

栗子

不可变对象

x = 1
y = x
print(id(x), id(y), id(1)) #postion 1 (8791467483984 8791467483984 8791467483984)
x += 1
print(id(x), id(y), id(1)) #postion 2 (8791467484016 8791467483984 8791467483984)

 

x, y同时指向对象1,在position1位置,id(x), id(y), id(1)的内存地址一样

x += 1, 开辟了新的内存空间,创建对象2,让x重新指向新的对象2,但是原来的对象1和对象1的内存地址并没有发生变化

优点:

减少重复对象对内存空间的占用

 

可变对象

可变对象的修改并不会开辟新的内存空间,而是直接在原内存空间上直接修改对象的内容

即对象的内存地址并不会改变,改变的是对象的内容

list1 = [1, 2]
print(list1, id(list1)) #position1 ([1, 2] 37249672)
list1.append(3)
print(list1, id(list1)) #position2 ([1, 2, 3] 37249672)

 

参数传递

python唯一支持的参数传递模式是共享传参。

共享传参指函数中的各个形参获得对应实参中各个引用的副本,即函数内部的形参是实参的别名。

x = 1
y = [1, 2]
def fun(a, b):
    print(a is x, b is y)

fun(x, y) #True True

说明:当调用函数fun(x, y)时,a和x共同指向数字1,b和y共同指向列表[1, 2],即形参a是实参x的别名,形参b是实参y的别名。

 

注意:不要使用可变的对象作为参数的默认值,否则可能会得到意想不到的结果。

def extend_element(ele, eles=[]):
    eles.append(ele)
    return eles

list1 = extend_element(''a'')
list2 = extend_element(2, [1])
list3 = extend_element(''b'')
print(list1, ''->'', list2, ''->'', list3) #[''a'', ''b''] -> [1, 2] -> [''a'', ''b'']
print(list1 is list3) #True

说明:我们发现list1和list3指向同一个列表,这是为什么呢?

其实这个根源在于,默认值在定义函数时计算,通常在模块加载时,因此默认值变成了函数对象的一个属性。

Python映射函数,通过引用/值传递?

Python映射函数,通过引用/值传递?

我对mapPython中的函数有疑问。

据我了解,该函数不会更改正在操作的列表,而是创建一个新列表并将其返回。这个对吗 ?

另外,我有以下代码

def reflect(p,dir):  if(dir == ''X''):    func = lambda (a,b) : (a * -1, b)   else:    func = lambda (a,b) : (a, b * -1)  p = map(func,p)  print ''got'', p

points 是一个元组数组,例如: [(1, 1), (-1, 1), (-1, -1), (1, -1)]

如果我以这种方式调用上述函数:

print pointsreflect(points,''X'')print points

列表points不变。在函数内部,打印功能可以正确打印我想要的内容。

有人可以指出我的方向吗,我可以学习所有通过值/引用等传递的内容如何在python中工作,以及如何解决以上问题?或者也许我正在努力尝试在python中模仿Haskell

谢谢

编辑:

说而不是p = map(func,p)

for i in range(len(p)):  p[i] = func(p[i])

列表的值在函数外部进行更新,就像通过引用进行工作一样。gh,希望这很清楚:S

答案1

小编典典

您会误解引用在Python中是如何工作的。在这里,所有名称都是引用,没有“值”。名称绑定到对象。但是=不会修改名称所指向的对象,而是将名称重新绑定到其他对象:

x = 42y = x# now:# ''is'' is a identity operator — it checks whether two names point to the# exact same objectprint x is y # => Trueprint x, y   # 42 42y = 69# now y has been rebound, but that does not change the ''42'' object, nor rebinds xprint x is y # => Falseprint x, y   # 42 69

要修改对象本身,它必须是可变的,即,公开对其进行了更改或具有可修改的字典的成员。当您重新绑定时,会发生与上述相同的事情p-它完全没有关系points,它只是修改了本地p名称的含义。

如果要模拟类似C ++的引用,则需要将对象封装到可变容器中,例如列表。

reflect([points], ''X'')# inside reflect:p[0] = ...

但是,至少在这种情况下,您不应该-应该只返回新对象。

points = reflect(points, ''X'')# inside reflect, instead of p = ...return map(func, p)

好吧,既然我考虑了一下,您也可以

p[:] = map(func, p)

但是同样,返回新对象通常更好。

关于Python映射列表项可与参数一起使用python 列表映射的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Pip已安装到python3.6,但是我在Ubuntu 18.04上将python3.7与VS Code一起使用、Python,如何创建一个函数,它将函数作为参数与两个数组一起使用?、python-变量与参数传递、Python映射函数,通过引用/值传递?的相关信息,请在本站寻找。

本文标签: