有许多类似的问题,但没有一个答案解决了我的问题。

我定义了几个解析大型数据集的函数。首先,我调用数据,然后将数据(在.txt中表示为行和列)组织到列表中,我将为各个数据条目编制索引。在此之后,我建立了我的函数,这些函数将一次一个地遍历列表。代码如下:

f = open(fn)

for line in iter(f):

entries = [i for i in line.split() if i]

def function_one():

if entries[0] == 150:

# do something

def function_two():

if entries[1] == 120:

# do something else

def function_three():

if len(entries) > 10:

# do something else

等。

我试图提示用户,当每个函数返回关于数据集的不同内容时,他们希望执行什么函数。我的尝试如下:

f_call = input('Enter Function Name: ')

if f_call in locals().keys() and callable(locals()['f_call']):

locals()['f_call']()

else:

print('Function Does Not Exist')

运行脚本时,会提示我输入'Enter Function Name:',如果输入'function_one'并返回,则返回prints'Function Does Not Exist'。我希望看到,如果输入正确,脚本将只执行用户输入的函数。如果用户输入正确,函数应该运行,并且print解析的数据。

我还尝试使用dict来存储函数,但没有成功。

任何帮助都将不胜感激。

如何使用用户输入调用Python中的函数的可能副本?

删除"in EDOCX1"〔0〕。

@Tinysandy如前所述,我没有成功地应用建议副本中提供的字典解决方案。

为什么你要在一个循环中重新定义你的函数?让我们从那个开始……

@zwer我的理解是,为了逐行(15000多行,可变列长度)处理数据集,必须使用for iter来单独分析所有行。如果不是这样的话,我完全愿意接受其他的建议。我对python和整体编码是全新的。

@drauch-这不是关于读取文件,而是关于在每个循环中重新定义函数。在循环外部创建函数,并将循环中的当前项传递给它们(例如,定义一个类似于def function_one(param): ...的函数,然后在需要时在循环中调用它,称为function_one(entries)(或另一个动态分配的名称,但我们将讨论这个…)

好的。我理解你说的大部分。也许我需要更新将项传递到函数的过程。您是否建议我将函数移出for循环,然后将用户输入放在for循环内选择函数?

根据你的评论,我认为你正在努力实现这样的目标:

def function_one(data):

if data[0] == 150:

pass  # do something

def function_two(data):

if data[1] == 120:

pass  # do something else

def function_three(data):

if len(data) > 10:

pass # do something entirely different

这定义了接受参数的函数,以便以后可以重用它们。然后,您要询问用户在处理数据时要使用哪个函数,因此:

while True:  # loop while we don't get a valid input

user_function = input('Enter a function name to use: ')  # ask the user for input

if user_function in locals() and callable(locals()[user_function]):  # if it exists...

user_function = locals()[user_function]  # store a pointer to the function

break  # break out of the while loop since we have our valid input

else:

print('Invalid function name, try again...')

最后,您可以加载您的文件,逐行读取它,将其拆分并按用户决定的函数进行处理:

with open(file_name,"r") as f:

for line in f:

entries = line.split()  # no need to check for empty elements

user_function(entries)  # call the user selected function and pass `entries` to it

当然,之后您可以做进一步的处理。

更新-这里是对上述代码的一个简单测试,给定文件test_file.txt包含:

tokenized line 1

tokenized line 2

tokenized line 3

文件中定义的file_name ="test_file.txt",函数定义为:

def function_one(data):

print("function_one called: {}".format(data))

def function_two(data):

print("function_two called: {}".format(data))

def function_three(data):

print("function_three called: {}".format(data))

如果执行代码,这是输出/跟踪:

Enter a function name to use: bad_name_on_purpose

Invalid function name, try again...

Enter a function name to use: function_two

function_two called: ['tokenized', 'line', '1']

function_two called: ['tokenized', 'line', '2']

function_two called: ['tokenized', 'line', '3']

从逻辑上讲,这对我更有意义。我已经根据您的建议更新了我的代码,但是在运行代码时,没有打印任何内容。我的描述可能有误导性,因为它没有指定我希望在每行之后打印数据分析(假设条件满足),尽管这是我在函数中所做的,所以我不确定为什么它不能工作。我觉得我对函数中的参数做了一些不正确的事情。

@drauch-我在上面添加了一些测试代码,演示了它是如何工作的。将它与您的设置进行比较,看看是否缺少某个组件。如果要比较单个值,请记住,str.split()返回字符串列表,因此如果要将它们与整数进行比较,必须首先将它们转换为整数(即if int(data[0]) == 150...)。

我的IDE中显示的错误是"来自外部作用域的阴影名称‘列’"。我认为原始for循环的更改方式改变了数据的存储方式。为了简单起见,我的完整代码将一些entries存储为新列表column。因此,我尝试使用column作为所有函数的参数,但在运行脚本时仍然一无所获。我觉得我的问题比上面的问题大得多。

要使代码正常工作,只需在调用时保持变量f_call不带''。

f_call = input('Enter Function Name: ')

if f_call in locals().keys() and callable(locals()[f_call]):

locals()[f_call]()

else:

print('Function Does Not Exist')

仍然导致"函数不存在"

它可能不是最有效的修复方法,但您可以使用类似的方法:

f_call = raw_input('Enter Function Name: ')

if f_call =="function_one":

function_one()

if f_call =="function_two":

function_two()

if f_call =="function_three":

function_three()

else:

print('Function Does Not Exist')

我也试过了。在运行脚本时,会反复提示用户'Enter Function Name:',而不是实际运行已输入的函数。

这可能是因为你把它放在了循环中。您将希望在创建函数后而不是在循环中放置我的脚本。

正确,但是如果我把它移出循环,当我输入函数名时不会发生任何事情。

可能先定义循环外部的函数

我使用for循环作为一种方法,一行一行地对每一行进行分析,以便所选函数将分析一行,然后分析下一行,等等…我相信这是迭代每一行的正确方法。如果不正确,请告诉我。我还是一个初学者,所以任何建议都非常感谢。

python使用什么函数接收用户输入的数据_python 3.x:调用和执行函数的用户输入...相关推荐

  1. python函数的参数可以接收哪些类型的数据_Python参数类型以及实现isOdd函数,isNum函数,multi函数,isPrime函数...

    Python参数类型以及实现isOdd函数,isNum函数,multi函数,isPrime函数 一.Python参数类型 形参:定义函数时的参数变量. 实参:调用函数时使用的参数变量. 参数传递的过程 ...

  2. c语言在一组数据中找最大值最小值,用c语言输入一组数据,输出最大最小值,求c语言程序讲解: 输入一组数据,求最大值,最小值,和,平均...

    问题标题 用c语言输入一组数据,输出最大最小值,求c语言程序讲解: 输入一组数据,求最大值,最小值,和,平均 2019-7-3来自ip:18.156.193.207的网友咨询 浏览量:318 手机版 ...

  3. python函数的参数可以接收哪些类型的数据_python强势来袭-0015-函数中的参数-送礼开始...

    接上一讲,这节我们专门介绍python函数的参数处理 本节主要内容 函数的形式参数和实际参数 函数的参数定义规则 函数参数的默认值 函数的可变参数 函数的关键字参数 函数的命名关键字参数 1.3. 函 ...

  4. python getattr_python 知识点:反射 之 getattr()实现以字符串形式导入模块和执行函数...

    # -*- coding: utf-8 -*- #知识点:反射 #通过字符串的形式去导入模块,这就是反射 #并以字符串的形式执行函数 #先看简单的小粒子 temp = 'mysql' #这个字符串是模 ...

  5. offset函数的高级用法_数据验证(数据有效性)结合Offset函数 的综合用法

    #数据验证# 在2013版本以前称为#数据有效性#.数据验证主要用于验证数据的输入的准确性,避免输入非法值以及在输入非法值时能给出提示或警告.可以根据实际需要限制输入范围,提供预设值通过下拉列表选择输 ...

  6. python自动抓取网管软件的数据_python实现scrapy爬虫每天定时抓取数据的示例代码...

    1. 前言. 1.1. 需求背景. 每天抓取的是同一份商品的数据,用来做趋势分析. 要求每天都需要抓一份,也仅限抓取一份数据. 但是整个爬取数据的过程在时间上并不确定,受本地网络,代理速度,抓取数据量 ...

  7. 【题目49:装快递(C++) ; ps:输入一行数据(带逗号或空格)更好的输入方式】

    /* 一辆运送快递的货车.运送的快递均放在大小不等的长方形快递盒中 为了能够装载更多的快递 同时不能让货车超载 需要计算最多能装多少个快递 快递的体积不受限制 快递数量最多1000个 货车载重量500 ...

  8. python内置函数sorted(x)的作用是_Python内置filter与sorted函数

    Python内部提供了序列过滤函数 filter . 接收参数为 一个函数以及一个序列.函数依次作用于序列中的每一个元素,并根据返回值是True 或者 False 判断是否删除该元素. 样例如下 # ...

  9. python函数内的作用域包括什么_python菜鸟求问关于嵌套函数中作用域范围应该怎么理解?...

    直接上代码 def l(list): def d(): return list return d #运行 l = l([1,2,3,4]) print l() 这个情况是正常的. 问题在于d函数为什么 ...

最新文章

  1. 图像滤镜艺术---(Nostalgla Filter)老照片滤镜
  2. HTML input type 输入类型
  3. C语言程序设计教学探讨,C语言程序设计多媒体教学探讨
  4. c语言中tgx是什么函数,《高等数学》课后练习题
  5. 曹大带我学 Go(12)—— 面向火焰图编程
  6. 什么是无头电商 - headless commerce
  7. Android学习总结(1)——好的 Android 开发习惯
  8. Effective C# 原则8:确保0对于值类型数据是有效的(翻译)
  9. web form常用控件
  10. maven配置阿里仓库
  11. 网络操作系统之网络操作系统的功能
  12. 流量卡之家:拥有边缘计算的物联网才是真正的物联网
  13. R 回归 虚拟变量na_R语言实战之R语言基础语法精讲(三)
  14. 华为AR系列路由器密码重置
  15. 洛谷P2258 子矩阵[2017年5月计划 清北学堂51精英班Day1]
  16. 笔记本电脑没有wifi图标导致没有网
  17. 五尺天涯 经典台词:岁月易流逝,珍惜眼前人。
  18. Discuz被挂马的处理经验,Dz为什么会被挂马
  19. HTML文档中注释标记作用,html的注释有什么作用
  20. 阿里云GPU计算型gn6i服务器配置性能好不好用?

热门文章

  1. matplotlib生成指定大小的空白的白色图(故意保存)实战:当然也可以保存正常的有内容的图像
  2. 置信区间(Confidence Intervals)是什么?如何计算置信区间?置信区间的两种计算方法是什么?二值样本置信区间如何计算?如何基于bootstrap抽样进行置信区间计算?
  3. 集成学习--百面机器学习
  4. GSVA包进行基因集变异分析
  5. c语言如何持续输入字符直到指定字符结束_《小白学C》第三章 常用输入输出函数...
  6. 纳米孔测序高错误区域恢复率高达99%,肖传乐/刘奕志/王建新等在Nature子刊发表新校正组装算法
  7. Genome-scale de novo assembly using ALGA 使用ALGA进行 基因组规模的从头组装
  8. 从RNA-seq结果到差异表达
  9. yolo如何降低loss_从未看过如此通俗易懂的YOLO系列
  10. opencv_python使用cv2.imread()读取中文路径,cv2.imwrite()把图片写入中文路径。