小编Tim*_*man的帖子

Python函数通过引用调用

在某些语言中,您可以使用特殊的保留字(如refval)通过引用或值传递参数.当您将参数传递给Python函数时,它永远不会在离开函数时改变参数的值.唯一的方法是使用全局保留字(或者我当前理解它).

例1:

k = 2

def foo (n):
     n = n * n     #clarity regarding comment below
     square = n
     return square

j = foo(k)
print j
print k
Run Code Online (Sandbox Code Playgroud)

会表现出来

>>4
>>2
Run Code Online (Sandbox Code Playgroud)

显示k是不变的

在此示例中,变量n永远不会更改

例2:

n = 0
def foo():
    global n
    n = n * n
    return n
Run Code Online (Sandbox Code Playgroud)

在此示例中,变量n已更改

在Python中是否有任何方法可以调用函数并告诉Python 参数还是引用参数而不是使用全局?

其次,在A级剑桥考试,他们现在说一个函数返回一个单一而过程返回值超过一个值.在80年代,我被教导了一个函数有一个返回语句,而程序没有.为什么现在不正确?

python

62
推荐指数
6
解决办法
13万
查看次数

prolog中的单例变量

我正在测试我的新版SWI prolog并不断遇到错误:singleton变量.

例:

member(X,[X|T]).

member(X,[X|T]) :- member(X,T).
Run Code Online (Sandbox Code Playgroud)

找到列表的成员,例如:

member(yolands,[yolanda,tim])

X = yes
Run Code Online (Sandbox Code Playgroud)

但相反,我得到X和T 的单例变量错误

如果我做以下事情:

member(X,[X|_]).
member(X,[_|T]) :- member(X,T).
Run Code Online (Sandbox Code Playgroud)

它有效,但看起来很难看!

任何人都可以解释为什么允许单个变量和这个ANSI标准吗?

prolog

21
推荐指数
3
解决办法
4万
查看次数

你能在Python中创建传统的固定长度和类型数组吗?

我正在剑桥考试委员会教授A Level课程.实际论文中的一个典型问题是:

在您选择的编程语言中,声明一个包含十个整数的数组,然后对其进行初始化.

我有这个:

myArray = []        #create the array

for i in range(10): # initializes to 0
    myArray.append(0)
Run Code Online (Sandbox Code Playgroud)

我相信这是大多数人在Python中会做的事情?然而,与Pascal等不同,它并没有严格地回答这个问题,因为Python中的列表本质上是动态数组,并且增加了不限制每个元素的数据类型的问题.我可以声明一个特定的大小数组,并在Pascal中输入,而不是一个空的动态列表,没有任何类型的循环并限制数组的类型?

像(伪代码)的东西:

myArray[10] : integer
Run Code Online (Sandbox Code Playgroud)

这是一个非商业性的问题,但是一个教育问题.

python

8
推荐指数
3
解决办法
8827
查看次数

将python模块放入Visual Studio 2015社区版

微软当然很难解决这个简单的问题.如何在我的Visual Studio社区版Python上安装sqlite3或Pmw.我通常把文件放在site packages文件夹中.使用Visual studio,他们谈论数据包管理器,但它在哪里?这真的很难吗?

python visual-studio

7
推荐指数
2
解决办法
2万
查看次数

Python多维数组

可能重复:
如何在Python中初始化二维数组?

在解决关于二维数组的一个简单问题时,我遇到了一个解决方案,该解决方案解释了如何使用重载运算符在Python中声明一个解决方案.

例:

Myarray = [[0]*3]*3
Run Code Online (Sandbox Code Playgroud)

这会产生以下数组(列表)

[[0,0,0],[0,0,0],[0,0,0]]
Run Code Online (Sandbox Code Playgroud)

在您使用之前,这似乎很好:

如果您分配一个元素,例如:

Myarray [0][0] = 1
Run Code Online (Sandbox Code Playgroud)

你得到意想不到的输出:

[[1,0, 0],[1,0,0] , [1,0,0]]
Run Code Online (Sandbox Code Playgroud)

实际上同时分配了Myarray [1] [0]和Myarray [2] [0]

我的解决方案

Myarray = [[][][]]
for i in range(0,3):
  for j in range (0,3):
     Myarray[i].append(0)
Run Code Online (Sandbox Code Playgroud)

此解决方案按预期工作:

Marray[0][1] = 1
Run Code Online (Sandbox Code Playgroud)

给你

[[1,0, 0],[0,0,0] , [0,0,0]]
Run Code Online (Sandbox Code Playgroud)

更简单的方法吗?这是一个A级剑桥问题的解决方案,与其他语言相比,对学生来说似乎太长了.

python

4
推荐指数
1
解决办法
591
查看次数

你可以从python打印文件吗?

有没有办法将输出发送到打印机而不是Python中的屏幕?或者是否有可以从python中调用以打印文件的服务例程?也许我可以导入一个允许我这样做的模块?

python

3
推荐指数
1
解决办法
6826
查看次数

计算E在Python的极限10**12处变得混乱?

我编写了一个程序,使用以下众所周知的公式计算自然对数基数(在数学中称为e):

e =(1 + 1.0/n)**n

代码是:

def e_formula(lim):
    n = lim
    e = (1 + 1.0/n) **n
    return e
Run Code Online (Sandbox Code Playgroud)

我设置了一个从10 1到10 100 迭代的测试:

if __name__ == "__main__":
    for i in range(1,100):
        print e_formula(10**i)
Run Code Online (Sandbox Code Playgroud)

然而以下结果在10**11左右爆炸.

shell的实际结果:

2.5937424601

2.70481382942

2.71692393224

2.71814592682

2.71826823719

2.7182804691

2.71828169413

2.71828179835

2.71828205201

2.71828205323

2.71828205336

2.71852349604

2.71611003409

2.71611003409

3.03503520655

1.0

我正在寻找一个原因,要么是在32位机器中超过浮点数限制的结果,要么是因为Python本身计算浮点数的方式.我不是在寻找更好的解决方案; 我只是想明白为什么会爆炸.

python floating-point

3
推荐指数
1
解决办法
104
查看次数

Python 通过 ref 调用 使用 ctypes 按值调用

我正在尝试编写一个程序来向 A-level 学生说明使用 Python 进行引用调用和按值调用之间的区别。我成功地将可变对象作为变量传递给函数,但发现我也可以使用 ctypes 库执行相同的操作。

我不太明白它是如何工作的,因为byref()ctype 库中有一个函数,但它在我的示例中不起作用。然而,通过调用一个没有byref()它的函数确实有效!

我的工作代码:

"""
Program to illustrate call by ref
"""

from  ctypes import *  #allows call by ref

test = c_int(56)  #Python call by reference eg address
t = 67            #Python call by value eg copy


#expects a ctypes argument
def byRefExample(x):
    x.value= x.value + 2
    

#expects a normal Python variable
def byValueExample(x):
    x = x + 2
         

if __name__ == "__main__":

    print "Before call test is",test …
Run Code Online (Sandbox Code Playgroud)

python ctypes

3
推荐指数
1
解决办法
4126
查看次数

划痕等于操作员问题

我在互联网上使用scratch.mit.edu版本2.0并编写程序来评估后缀表达式.当我使用letter..of ...块逐字遍历输入字符串,例如:"23+"(后缀)时,它工作正常.

然后我添加一个..的字母..来识别一个空格键字符,这样用户就可以在表达式中插入空格,例如"2 3 +"

但是,似乎无法识别空白字符.我试过了

1) Lookahead = ""
2) Lookahead =' '  
3) Lookahead ='' 
Run Code Online (Sandbox Code Playgroud)

其中没有一个能够找到遇到的空间.

这是项目:https://scratch.mit.edu/projects/77653712/

mit-scratch

0
推荐指数
1
解决办法
118
查看次数