精华内容
下载资源
问答
  • 前言目前TS官方API还不支持获取函数返回值类型,但是对于函数式编程流行的当今,这个功能非常的重要,比如我们希望能在使用redux-thunk中getState或者mapStateToProps中state时IDE提示state类型,这时就需要获取...

    e198922a7a253df5669f08234d43a186.png

    前言

    目前TS官方API还不支持获取函数返回值类型,但是对于函数式编程流行的当今,这个功能非常的重要,比如我们希望能在使用redux-thunk中getState或者mapStateToProps中state时IDE提示state类型,这时就需要获取reducer函数的返回值类型,并且进行联合导出供我们使用。

    前置知识

    • 高级类型
    • 泛型、泛型约束
    • 类型推论
    • 类型断言

    以上几点都能在TS文档中找到非常清晰简洁的解释和例子,这里就不花篇幅解释了。

    核心代码

    // 声明一个泛型类型别名,返回值与泛型类型相同,入参类型不限制。
    type Reverse<T> = (arg: any) => T;
    
    // 声明一个泛型方法,入参arg继承泛型约束,返回空对象并断言其类型为T
    function returnResultType<T>(arg: Reverse<T>): T {
      return {} as T;
    }
    
    // 调用returnResultType,传入方法 (arg: any) => 3,获得result返回值
    const result = returnResultType((arg: any) => 3);
    
    // 获取result类型并重名为ResultType
    type ResultType = typeof result;
    

    代码分析

    returnResultType((arg:any)=>3);
    

    调用returnResultType时,由于没有显示声明泛型类型,所以TS只能通过入参来进行类型推论,接着往下面走:

    type Reverse<T> = (arg: any) => T;
    

    由于入参的类型为Reverse<T> ,通过入参返回值是3可以推断出:

    type Reverse<number> = (arg: any) => number;
    

    由于Reverse的T是根据returnResultType传入的,所以同理得出:

    function returnResultType<number>(arg: Reverse<number>): number {
      return {} as number;
    }
    

    由于返回值已经进行类型断言为number。所以在typeof result时,可以得出number类型。

    该方法确实比较绕,因为存在多个泛型T的来回推论和反推论。

    ~~~

    结合Redux应用

    接下来我们通过reducer函数来应用一下:

    1.首先编写两个简单的reducer:userReducer和loginReducer

    /**
    * userReducer
    */
    const initUserState = {
      name: ''
    }
    
    const userReducer = (state = initUserState, action: any) => {
      switch (action.type) { 
        case 'setName':
          return {
            name: 'Larry',
            ...state
          };
        default:
          return state;
      }
    }
    
    /**
    * loginReducer
    */
    const initLoginState = {
      token: ''
    }
    
    const loginReducer = (state = initLoginState, action: any) => {
      switch (action.type) { 
        case 'login':
          return {
            token: 'token',
            ...state
          };
        default:
          return state;
      }
    }
    

    2.在store中

    const reducers = combineReducers({
      userReducer,
      loginReducer
    });
    
    type Reverse<T> = (state: any, action:any) => T;
    
    function returnResultType<T>(arg: Reverse<T>): T {
      return {} as T;
    }
    
    const GlobalState = returnResultType(reducers);
    
    type GlobalStateType = typeof GlobalState;
    

    此时的 GlobalStateType 就是我们需要的所有reducer函数返回的对象类型。

    bb95caf8fadcc0e5015d395f9e44eeb6.png
    最后得到的类型

    最后,导出 GlobalStateType,在我们mapStateToProps中使用时就能轻松得到类型:

    68e7ce4fec04d941f40a3e9b6b8f9970.png

    逃~~~

    展开全文
  • Python async异步编程获取函数返回值

    千次阅读 2020-03-14 11:31:05
    Python async异步编程获取函数返回值 import asyncio import time async def test1(): lit1=[] for i in range(10): await asyncio.sleep(3) # print(i,"test1") lit1.append(i) return l...

    Python async异步编程获取函数返回值

    import asyncio
    import time
    
    async def test1():
        lit1=[]
        for i in range(10):
            await asyncio.sleep(3)
            # print(i,"test1")
            lit1.append(i)
        return lit1
    
    async def test2():
        lit2=[]
        for i in range(15):
            await asyncio.sleep(2)
            # print(i,"test2")
            lit2.append(i)
        return lit2
    
    def run():
        start_time = time.time()
        loop = asyncio.get_event_loop()
        task = loop.create_task(test1())
        task1 = loop.create_task(test2())
        loop.run_until_complete(task)
        loop.run_until_complete(task1)
        loop.close()
        print(task.result())
        print(task1.result())
        end_time = time.time()
        print(end_time-start_time)
    
    run()
    

    执行结果:
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
    30.025165796279907

    展开全文
  • 前言目前TS官方API还不支持获取函数返回值类型,但是对于函数式编程流行的当今,这个功能非常的重要,比如我们希望能在使用redux-thunk中getState或者mapStateToProps中state时IDE提示state类型,这时就需要获取...

    3f45d38c1dbd8934deb57ba1e65a2e0b.png

    前言

    目前TS官方API还不支持获取函数返回值类型,但是对于函数式编程流行的当今,这个功能非常的重要,比如我们希望能在使用redux-thunk中getState或者mapStateToProps中state时IDE提示state类型,这时就需要获取reducer函数的返回值类型,并且进行联合导出供我们使用。

    前置知识

    • 高级类型
    • 泛型、泛型约束
    • 类型推论
    • 类型断言

    以上几点都能在TS文档中找到非常清晰简洁的解释和例子,这里就不花篇幅解释了。

    核心代码

    // 声明一个泛型类型别名,返回值与泛型类型相同,入参类型不限制。
    type Reverse<T> = (arg: any) => T;
    
    // 声明一个泛型方法,入参arg继承泛型约束,返回空对象并断言其类型为T
    function returnResultType<T>(arg: Reverse<T>): T {
      return {} as T;
    }
    
    // 调用returnResultType,传入方法 (arg: any) => 3,获得result返回值
    const result = returnResultType((arg: any) => 3);
    
    // 获取result类型并重名为ResultType
    type ResultType = typeof result;
    

    代码分析

    returnResultType((arg:any)=>3);
    

    调用returnResultType时,由于没有显示声明泛型类型,所以TS只能通过入参来进行类型推论,接着往下面走:

    type Reverse<T> = (arg: any) => T;
    

    由于入参的类型为Reverse<T> ,通过入参返回值是3可以推断出:

    type Reverse<number> = (arg: any) => number;
    

    由于Reverse的T是根据returnResultType传入的,所以同理得出:

    function returnResultType<number>(arg: Reverse<number>): number {
      return {} as number;
    }
    

    由于返回值已经进行类型断言为number。所以在typeof result时,可以得出number类型。

    该方法确实比较绕,因为存在多个泛型T的来回推论和反推论。

    ~~~

    结合Redux应用

    接下来我们通过reducer函数来应用一下:

    1.首先编写两个简单的reducer:userReducer和loginReducer

    /**
    * userReducer
    */
    const initUserState = {
      name: ''
    }
    
    const userReducer = (state = initUserState, action: any) => {
      switch (action.type) { 
        case 'setName':
          return {
            name: 'Larry',
            ...state
          };
        default:
          return state;
      }
    }
    
    /**
    * loginReducer
    */
    const initLoginState = {
      token: ''
    }
    
    const loginReducer = (state = initLoginState, action: any) => {
      switch (action.type) { 
        case 'login':
          return {
            token: 'token',
            ...state
          };
        default:
          return state;
      }
    }
    

    2.在store中

    const reducers = combineReducers({
      userReducer,
      loginReducer
    });
    
    type Reverse<T> = (state: any, action:any) => T;
    
    function returnResultType<T>(arg: Reverse<T>): T {
      return {} as T;
    }
    
    const GlobalState = returnResultType(reducers);
    
    type GlobalStateType = typeof GlobalState;
    

    此时的 GlobalStateType 就是我们需要的所有reducer函数返回的对象类型。

    13fa6673eb0eee4bcbdc53a9680067cc.png
    最后得到的类型

    最后,导出 GlobalStateType,在我们mapStateToProps中使用时就能轻松得到类型:

    a91e96ffbcbcb6bd3bea4e85dde9ba49.png

    逃~~~

    展开全文
  • Python中利用强大的threading模块可以很容易的实现多线程开发,...获取函数返回值的方法可以如下:1). 利用multiprocessing.pool类import timeimport randomdef test1(): # run without multi-threadt = time.time...

    Python中利用强大的threading模块可以很容易的实现多线程开发,提高运行速度。这一般是对某个进行大量计算操作的的函数进行多线程处理,然后合并各线程的结果。获取函数返回值的方法可以如下:

    1). 利用multiprocessing.pool类

    import time

    import random

    def test1(): # run without multi-thread

    t = time.time()

    list = []

    for i in range(10000000):

    list.append(random.choice([0,1,2,3,4,5])) # operation

    print time.time()-t

    return list

    def test2(): # run with multi-thread

    from multiprocessing.pool import Pool

    def func(x):

    return random.choice([0,1,2,3,4,5])

    t = time.time()

    pool = Pool(processes=4) #线程数

    results = pool.map_async(func, range(10000000)) # 用法同map,与之相似的还有apply和apply_async

    print time.time()-t

    return results

    r1 = test1()

    r2 = test2()

    运行结果为7.6s和4.2s。可以看到结果并非线性地减少4倍,这可能与运行结果需要同步有关(没深入研究,猜的)。

    2). 利用threading类

    def func2(m, results, index):

    for i in range(m):

    result[index].append(random.choice([0,1,2,3,4,5]))

    from threading import Thread

    def test4():

    threads = [None] * 4

    results = [[] for i n range(4)]

    for i in range(4):

    threads[i] = Thread(target=func2, args=(2500000, results, i))

    threads[i].start() # 开始线程

    for i in range(4):

    threads[i].join() # 等待线程结束后退出

    return results

    不过要注意的是只有在处理需要占用大量内存的数据的时候才考虑多线程,因为线程之间的同步问题很重要,因此设计函数的时候就需要注意,否则处理不好反而会产生很多问题。

    参考

    PS:threading模块和multiprocessing模块的文档的说明十分详细,准备好好研究下。

    展开全文
  • Python中利用强大的threading模块可以很容易的实现多线程开发,提高...获取函数返回值的方法可以如下: 1). 利用multiprocessing.pool类 import time import random def test1(): # run without multi-thread t =...
  • 1、函数定义 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。Shell 函数定义的语法格式如下: [function] funname [()]{ 函数体 [return int;] } 格式1: 简化写法,不写 function 关键字: ...
  • 通过在函数前添加&可以获取函数返回值的引用,如:function &test(){return 10;} 转载于:https://www.cnblogs.com/xiaodo0/p/3611313.html
  • shell 获取函数返回值

    2019-11-12 10:52:25
    在shell脚本中要获取一个函数返回值,有两个方法: #! /bin/sh function test() { echo "test here" return 100 } DD=`test` #echo excute over echo "return: $?" echo "DD: $DD" return: 100 DD: test here ...
  • 原理:函数内部使用echo输出,调用函数时将输出结果捕获。 缺点:只能输出与返回值相关的内容,且所有使用到的命令(如grep)一定要记得2>&1输出到空设备。 #!/bin/sh function test() { echo 100 } echo $...
  • 函数 func1() { local tmp=1000 echo $tmp return $?; } 调用函数 mySize=`func1` echo $mySize
  • js jquery ajax 获取函数返回值问题

    千次阅读 2012-05-14 21:46:49
    jquery ajax 在获取函数返回值问题上总不如人意,最终找到以下解决办法: //添加async:false.即修改为同步 ;等ajax给bol赋值完毕后,才执行下面的js部分。而异步的话,还没有来得及赋值,就已经return了。  ...
  • python多线程获取函数返回值

    千次阅读 2019-10-18 15:07:27
    welcome to my blog 创建线程的方式有两种, 1....封装成类可以获取子线程的返回值 具体例子: 用4个线程分别计算4个列表中元素的平方值 import threading import random class MyClass(threading.Thread): ...
  • SHELL中获取函数返回值

    千次阅读 2019-11-15 15:07:28
    终于找到办法了。 function test() { echo abc } ret=`test` echo 1=$ret ret=$(test) echo 2=$ret
  • python多进程获取函数返回值

    千次阅读 2020-03-06 15:52:43
    方法一 利用multiprocessing的pipe/queue...利用pyperclip模块,将返回值放在剪贴板中 import pyperclip def f1(): pyperclip.copy('pfs') content = pyperclip.paste() print(content) def f2(): print(1...
  • function findXXX( ){ arr=$2 for i in ${arr[*]}; do if [[ $i == $1 ]] ;then return "1" ; fi done return "0" ; } findValue=$(findXXX ${path[len_path-1]} "${Arr[*]}" ) echo $?
  • 由于使用ajax进行异步请求,导致函数调用a函数,不等ajax执行完,就执行alert,导致无法获取a函数的输出,输出报错。 修改方法: function a() { $.ajax({ url:'www.baidu.com', data: {}, method:'post', ...
  • 方法一:使用队列 import queue ... func_name = sys._getframe().f_code.co_name # 获取函数名 print("%s run ....." % func_name) q.put((x+y,func_name)) def func2(x,y): func_name = sys._g
  • <p>I am writing a <a href="http://golang.org/" rel="noreferrer">Go</a> program. From this Go program, I would like to call a Python function defined in another file and receive the function's ...
  • 从这个Go程序中,我想调用另一个文件中定义的Python函数并接收该函数返回值,以便在Go程序的后续处理中使用它。不过,我很难在Go程序中获取任何返回的数据。下面是一个我认为可行但显然不行的最低限度的例子:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,877
精华内容 1,950
关键字:

获取函数返回值