使函数定义以python文件顺序独立

我使用Python CGI。 我无法在定义函数之前调用它。

在Oracle PL / SQL中,存在“转发声明”的技巧:将所有函数都命名为最顶层,因此定义的顺序无关紧要。

Python中也有这样的技巧吗?

例:

def do_something(ds_parameter):

helper_function(ds_parameter)

....

def helper_function(hf_parameter):

....

def main():

do_something(my_value)

main()

大卫是对的,我的榜样是错误的。关于什么:

def do_something(ds_parameter):

helper_function(ds_parameter)

....

def print_something():

do_something(my_value)

print_something()

def helper_function(hf_parameter):

....

def main()

....

main()

我可以在脚本顶部“提前声明”功能吗?

user37986 asked 2020-07-21T01:23:45Z

7个解决方案

66 votes

在使用任何功能之前,必须先定义所有功能。

但是,只要可以在任何可执行代码使用功能之前定义所有功能,就可以按任何顺序定义功能。

您不需要“转发声明”,因为所有声明都是完全相互独立的。 只要所有声明都在所有可执行代码之前。

您有问题吗? 如果是这样,请发布无效的代码。

在您的示例中,print_something()不合适。

规则:所有功能必须在任何实际起作用的代码之前定义

因此,将所有起作用的语句放在最后。

S.Lott answered 2020-07-21T01:26:00Z

28 votes

更好地说明您的观点是:

def main():

print_something()

....

def do_something(ds_parameter):

helper_function(ds_parameter)

....

def print_something():

do_something(my_value)

def helper_function(hf_parameter):

....

main()

换句话说,您可以将main()的定义放在顶部,以方便编辑-如果大部分时间都花在编辑main上,则避免频繁滚动。

Stan Vernon answered 2020-07-21T01:26:25Z

3 votes

假设您有一些代码片段在定义函数后调用了main,那么您的示例将按编写的方式工作。 由于Python的解释方式,定义do_something函数时,不需要定义helper_function主体调用的任何函数。

Python在执行代码时将采取的步骤如下。

定义函数do_something。

定义函数helper_function。

定义函数main。

(基于上面的假设)致电main。

从主要,调用do_something。

从helper_function,调用helper_function。

Python唯一关心helper_function存在的时间是到了第六步。 在尝试查找helper_function以便调用它之前,您应该能够验证Python一直执行到第六步,然后引发错误。

David Locke answered 2020-07-21T01:27:20Z

2 votes

我从来没有遇到过需要“前向功能定义”的情况。您能不能简单地将do_something移到您的主要功能内部?

def do_something(ds_parameter):

helper_function(ds_parameter)

....

def print_something():

do_something(my_value)

def helper_function(hf_parameter):

....

def main()

print_something()

....

main()

Python不在乎在第3行上使用了helper_function()(在do_something函数中)

我建议使用WinPDB之类的代码并逐步执行代码。 它很好地显示了Python的parser / executor(?)的工作方式

dbr answered 2020-07-21T01:27:49Z

2 votes

def funB(d,c):

return funA(d,c)

print funB(2,3)

def funA(x,y):

return x+y

上面的代码将返回错误。 但是,下面的代码很好...

def funB(d,c):

return funA(d,c)

def funA(x,y):

return x+y

print funB(2,3)

因此,即使您必须在完成任何实际工作之前一定先定义函数,但如果不显式使用该函数,则有可能逃脱现实。 我认为这有点类似于其他语言的原型制作。

nyan314sn answered 2020-07-21T01:28:14Z

1 votes

对于所有人来说,尽管做法不好,但仍需要解决方法...

我有一个类似的问题,并这样解决:

import Configurations as this

'''Configurations.py'''

if __name__ == '__main__':

this.conf01()

'''Test conf'''

def conf01():

print ("working")

因此,我可以在文件顶部更改目标配置。 诀窍是将文件导入自身。

luke8800gts answered 2020-07-21T01:28:42Z

0 votes

使用多处理模块:

from multiprocessing import Process

p1 = Process(target=function_name, args=(arg1, arg2,))

p1.start()

Neeraj Bansal answered 2020-07-21T01:29:02Z

python helper函数_使函数定义以python文件顺序独立相关推荐

  1. c语言程序 中断函数示例,单片机_C语言函数_中断函数(中断服务程序)

    c语言中的中断函数注意事项 单片机_C语言函数_中断函数(中断服务程序) 在开始写中断函数之前,我们来一起回顾一下,单片机的中断系统. 中断的意思(学习过微机原理与接口技术的同学,没学过单片机,也应该 ...

  2. python 不定参数_人生苦短,我学不会Python。——函数中不定长参数的写法

    定义函数 我们可以定义一个实现自己想要的功能的函数.Python定义函数以def开头,定义函数基本格式如下: def 函数名 (参数列表):"函数_文档字符串"函数体 return ...

  3. 带参函数_更好的理解Python第五弹函数预处理与指针

    编译预处理 预处理概念:在编译之前进行处理 在C语言中,预处理行为宏定义,文件包含,条件编译 指令 用处 # 无 #define 定义一个宏 #undef  取消定义一个已经定义的宏 #include ...

  4. python fact函数_第5天:Python 函数

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段,所以我经常说函数是程序员规模化使用的基础. 函数能提高应用的模块性,和代码的重复利用率.在程序设计中,常将一些常用的功能模块编写成函数 ...

  5. 封装成vla函数_第四章:Python之函数

    第一节:函数入门与定义函数 理解函数 所谓函数,就是为一段实现特定功能的代码"取"个名字,以后即可通过该名字来执行(调用)这段代码 从逻辑上看,函数相当于一个黑匣子 定义函数的语法 ...

  6. python 惰性序列_菜鸟学飞自学Python(五)高阶函数

    (仅个人学习摘抄) 函数式编程 函数式编程就是一种抽象程度很高的编程范式,特点是允许把函数本身作为参数传入到另一个函数,还允许返回一个函数. 高阶函数 高阶函数--Higher-order funct ...

  7. python求极限_数学——函数极限知识以及sympy库的limit

    函数极限与Sympy库 欢迎访问我的博客 这部分可以参考sympy库中的limit 在$z_0$点处计算$e(z)$函数的极限 \(\lim_{z \to z_0} e(z)\) = limit(e, ...

  8. python虚函数_虚函数和纯虚函数的区别

    首先:强调一个概念 定义一个函数为虚函数,不代表函数为不被实现的函数. 定义他为虚函数是为了允许用基类的指针来调用子类的这个函数. 定义一个函数为纯虚函数,才代表函数没有被实现. 定义纯虚函数是为了实 ...

  9. python纯函数_理想国真恵玩Python从入门到精通第006天_纯函数写游戏管理系统

    原标题:理想国真恵玩Python从入门到精通第006天_纯函数写游戏管理系统 前面已经带大家学习了函数,高级数据类型,比如说字典,今天带大家用函数加字典做一个游戏管理系统,希望大家喜欢.废话不多说,直 ...

最新文章

  1. GitHub开源的AI下五子棋(基于博弈树极大极小值alpha-beta剪枝搜索)
  2. 如何配置Linux的时钟同步
  3. 【译】 Google: Still in The Search 搜索巨人Google的伟大转变 (二)
  4. 程序设计基础(c语言),程序设计基础(C语言)
  5. RPC 【Remote Procedure Call】 原理
  6. 实现strstr库函数功能
  7. Android的学习之路(三)项目的启动过程和安装过程具体解释
  8. awk教程入门与实例练习(三)
  9. NUS 联合 Sea AI Lab 发表 Multi-view Pose Transformer,完全端到端学习,超强可扩展性...
  10. mysql binlog ignore db_MySQL binlog_ignore_db 参数最全解析
  11. 软件工程项目之Windows Phone Application的一个设想
  12. sqli-labs Less-11 and Less-12
  13. 如何从云桌面(远程桌面)拷贝文件
  14. 八大数据分析模型之——用户模型(一)
  15. android+6+wifi密码,Android 如何查看Wifi密码
  16. linux 防火墙reject,CentOS 防火墙配置与REJECT导致没有生效问题
  17. Android 根据应用内选择时间调整TextClock时区
  18. Windows桌面美化(壁纸网站,任务栏透明、颜色设置)
  19. xlsx表格怎么筛选重复数据_excel表格如何筛选重复数据 在Excel表格的两列数据中提取不重复值的四种方法...
  20. 游戏语音聊天系统完美运营源码,附详尽视频教程

热门文章

  1. linux ftp登录530错误,Linux系统中用ftp连接530错误怎么办
  2. android开发查漏补缺图
  3. 如何解压tar.gz文件或是.gz文件
  4. 图像处理-opencv去水印(如有图片侵权,请及时联系)
  5. 2009年必看十大动漫游戏改编电影
  6. 遥感影像处理的几个概念
  7. SQLite源代码分析----------分词器②
  8. P3646 [APIO2015]巴厘岛的雕塑
  9. python安装方法3.8.2_Python 3.8.2详细图文安装教程(附安装包) | 我爱分享网
  10. laravel 开发辅助工具