python中函数的函数

2024-03-28 21:20:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将代码从calculateForce开始重复5次,同时反馈结果,即将position和position1反馈到循环中。我想我可能想写一个函数的一个函数,但我从来没有这样做过,我不知道如何做到这一点。你知道吗

from __future__ import print_function, division
import numpy as np
G = 10
t=5

class Particle:
    def __init__(self,mass):
        self.mass = mass
        self.position = np.array([0,0],int)

    def update():
        for x in range():   

        def calculateForce(self,other):
            Force = (G*self.mass*other.mass)/(other.position - self.position)**2
            print(Force)
            return(Force)

        def calculateAcceleration(self,Force): 
            acceleration = (Force/self.mass)    
            print('Acceleration of particle is', acceleration)
            return acceleration   

        def calculateAcceleration1(other, Force):
            acceleration1 = (Force/other.mass)
            print('Acceleration of particlce is', acceleration1)
            return acceleration1        

       def calculateVelocity(self):
           velocity = (acceleration*t)
           print('Velocity of particle is', velocity)
           return velocity

      def calculateVelocity1(self):
          velocity1 = (acceleration1*t)
          print('Velocity of particle1 is', velocity1)
          return velocity1

      def calculatePosition(self):
         position = (velocity*t)
         print('Position of particle is', position)
         return position

      def calculatePosition1(self):
         position1 = (velocity1*t)
         print('Position of particle1 is', position1)
         return position1

p = Particle(10)
p1 = Particle(20)       
p1.position[0] = 5 
p1.position[1] = 5 
print(p1.position)
Force = p.calculateForce(p1)
acceleration = p.calculateAcceleration(Force)
acceleration1 = p1.calculateAcceleration1(Force)
velocity = p.calculateVelocity()
velocity1 = p.calculateVelocity1()
position = p.calculatePosition()
position1 = p.calculatePosition1()

Tags: ofselfreturnisdefpositionmassother
1条回答
网友
1楼 · 发布于 2024-03-28 21:20:58

这是一个基于递归和迭代的解决方案,形式是一个函数,您可以将指定的函数传递给它(例如calculateForce、calculateAcceleration等):

#! /usr/bin/env python
from sys import argv


def myf(value):
    return value*2


class C(object):
    def myf2(self, value):
        return value*3


def pump_rec(times, funct, value):
    print "pump_rec: ", times, funct.__name__, value
    if times > 1:
        return funct(pump_rec(times-1, funct, value))
    else:
        return funct(value)


def pump_iter(times, funct, value):
    while times > 0:
        print "pump_iter: ", times, funct.__name__, value
        value = funct(value)
        times -= 1
    return value


if __name__ == "__main__":
    if len(argv) < 3:
        print "usage: %s times value" % (argv[0],)
        exit(1)
    print pump_rec(int(argv[1]), myf, int(argv[2]) )
    print pump_iter(int(argv[1]), myf, int(argv[2]) )
    obj = C()
    print pump_rec(int(argv[1]), obj.myf2, int(argv[2]) )
    print pump_iter(int(argv[1]), obj.myf2, int(argv[2]) )

运行它与

python fof.py 3 1

产生

pump_rec:  3 myf 1
pump_rec:  2 myf 1
pump_rec:  1 myf 1
8
pump_iter:  3 myf 1
pump_iter:  2 myf 2
pump_iter:  1 myf 4
8
pump_rec:  3 myf2 1
pump_rec:  2 myf2 1
pump_rec:  1 myf2 1
27
pump_iter:  3 myf2 1
pump_iter:  2 myf2 3
pump_iter:  1 myf2 9
27

相关问题 更多 >