自定义一个函数,能不能在函数执行到一半的时候,发送信息给调用者,然后函数继续执行??? 5C

自定义一个函数,能不能在函数执行到一半的时候,发送信息给调用者,然后函数继续执行???,如果不可以的话,那qq的登入功能怎么实现的,密码正确可以登入,执行下一个窗口;而密码不对就不执行,这个怎么搞?

10个回答

回调函数。调用一个方法时,传递另一个方法的引用,或者函数名,或者委托(不同的语言中实现不一样,脚本语言使用最简单),你是用python语言吧,
那我提供一个python的例子;

def cal():
    print('cal')
def call(fun):
    print("执行一部分")
    fun()#执行传入的函数
    print("执行另一部分")
if __name__ == '__main__':

    call(cal)#调用call函数,将cal作为参数传入

或者你把一个方法分成多个啊

老铁,这和你说的QQ那个,大概可以说半毛钱关系都没有,分清楚服务器和客户端的通讯,进程间的通信。
看你写了信号,如果没猜错你问的的应该可以用进程间的通信解决——信号
基础知识补一下:Python信号处理
① os.kill(pid,sig) 发送信号
功能:发送一个信号给某个进程
参数:pid 给发信号的进程的pid
sig 要发送什么信号
② signal.alarm(sec) 设置时钟
功能:设置时钟信号 一定时间后给自身发送一个SIGALRM信号
参数:sec 时间(秒)
注意:一个进程中只能设置一个时钟,第二个时钟会覆盖之前的时间
③ signal.pause() 阻塞等待
功能: 阻塞等待一个信号的发生
④ signal.signal(sig, handler) 处理信号
功能:处理信号
参数:sig 要处理的信号
handler 信号处理方法(系统默认和自己定义)

qq_42052204
熊猫923 在不同的py文件里的两个程序互相调用,,,,要一个py里的文件,执行if 。。else。。成功返回给另一个py文件的调用者一个值,进程实现不了把,我想用return ,可是用了就不可以执行成功以后的代码了吧
一年多之前 回复

python语言的话,可以用生成器函数
https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00138681965108490cb4c13182e472f8d87830f13be6e88000

生成器函数就是你说的那样,可以运行一部分,返回一个结果,再运行一部分,再返回一个结果。
而调用者得到结果,其实暂停了函数的调用,直到调用next,生成器才继续往下运行。

再给一个链接

http://python.jobbole.com/87613/

虽然生成器一般用来代替列表,返回集合一类的数据,但是实际上也可以把你的业务逻辑放在里面,而利用它返回每个步骤的消息(用yield语句)
完全和你的要求一致。

比如登录窗口,也可以在用户确认或者取消之后获取用户填写的信息,以及动作,判断下一步操作。

这不就是多线程吗?一个函数在一个线程里运行,并将中间结果以消息形式发出去并继续执行。另一个线程则用来监听这些消息,并做相应处理。
那些带图像界面的程序基本都是这么运作的啊,你在图像界面上点个“执行”按钮,一个线程就被启动并执行某个函数,然后该函数将执行结果以消息形式发出,然后图形界面捕获该消息并显示在界面上。
举个直观点的例子,比如那些带进度条的程序。

blueswhen
blueswhen 用return?那函数不就执行完了,怎么可能再继续执行后面的代码?你一定要执行后面的代码,那把后面的代码包成个函数接着调用不就行了?最好把代码贴出来,不是很理解你的需求。
一年多之前 回复
qq_42052204
熊猫923 在不同的py文件里的两个程序互相调用,,,,要一个py里的文件,执行if 。。else。。成功返回给另一个py文件的调用者一个值,进程实现不了把,我想用return ,可是用了就不可以执行成功以后的代码了吧
一年多之前 回复

这不就是一个if else吗,用户发起一个请求 ---- 接收用户输入的用户名和密码,然后和数据库用户表的数据去对比 --- 正确执行下一步,错误提示用户 (当然这只是一个最简单的过程)

qq_42052204
熊猫923 在不同的py文件里的两个程序互相调用,,,,要一个py里的文件,执行if 。。else。。成功返回给另一个py文件的调用者一个值,进程实现不了把,我想用return ,可是用了就不可以执行成功以后的代码了吧
一年多之前 回复

这个跟你打的比方不是一回事吧……登陆完之后是处于等待服务器下发验证结果,收到结果之后才是完成登录过程……
你那个自定义函数问题最合适的方式是把一个function作为参数送入,执行到一半的时候直接调用这个function通知调用者,然后自己继续执行……

比如
private function test(cbFun:Function):void
{
//这里前半段

  //这里通知调用者
   cbfun()


  //后半段

}

在调用者函数传入参数,在本函数中进行判断处理就可以了。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问