tf.py_func( func, inp, Tout, stateful=True, name=None)封装一个python函数并将其用作TensorFlow op。 给定一个python函数func,它以numpy数组作为参数并返回numpy数组作为输出,将这个函数包装为张量流图中的一个操作。 (my_func, [input], tf.float32)注意:tf.py_func()操作有以下已知的限制:函数体(即func)不会在GraphDef中序列化。 重要提示:func的输入和输出numpy ndarrays不能保证是副本。在某些情况下,它们的底层内存将与相应的TensorFlow张量共享。就地修改或在py中存储func输入或返回值。 返回值:func计算的张量或单个张量的列表。原链接: https://tensorflow.google.cn/versions/r1.10/api_docs/python/tf/py_func?
python中的func表示自定义的函数,func只是一个函数名,它的名字不是固定不变的,自定义的函数的参数包括无参数,也可以根据函数动能传递必备参数、位置参数以及关键字参数等。 小白在学习python的时候,都会遇到func,一脸蒙!是什么意思呢?在python中,func表示的自定义函数。 python中的函数分为内置函数和自定义函数,内置函数是python本身自带的,func函数是人为定义的。 func只是一个函数名,名称不是固定的,你可以取其他的名字,但要避免与python关键字冲突! python中如何定义函数? 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
热卖云产品年终特惠,2核2G轻量应用服务器7.33元/月起,更多上云必备产品助力您轻松上云
以前自己写委托都用 delegate, 最近看组里的大佬们都用 Func , 以及 Action 来实现, 代码简洁了不少, 但是看得我晕晕乎乎。 花点时间研究一下,记录一下,以便后期的查阅。 1、Func 用法 (封装方法,传入参数, 有返回值) Func<in T1, in T2, ..., out TResult> (T1, T2, ...) public static void Main() { // 方法一: Func 相当于系统内置的 委托 Func<int, int, string > method = Calculate; // 方法二: 调用 Lambda 方法实现, 更简洁 Func<int, int, string> method 当封装静态方法可取时。 当调用方不需要访问实现该方法的对象中的其他属性、方法或接口时。 需要方便的组合。 当类可能需要该方法的多个实现时。 4.
`__getitem__()、__len__()` 方法 2. 特殊方法 1. __getitem__()、__len__() 方法 举一个扑克牌的例子 import collections Card = collections.namedtuple('Card_name', [ _cards[pos] deck = FrenchDeck() print(len(deck)) # 13*4=52 print(deck[0]) # [] 调用 __getitem__ 方法 特殊方法 python解释器会自动调用,如 len(obj) ,解释器 调用 obj的 __len__() 方法 内置的类型的 __len__() 方法,抄近路,直接读取 ob_size 属性 for __iter__() 方法 通过内置函数(如,len,iter,str等)来使用特殊方法是最好的选择 不要自己随意添加特殊方法 __func__ ,将来的 python版本 可能添加该方法 特殊方法:https
因此,使用tf.py_func是一个比较好的途径。对于tf.py_func的使用,可以参见计算RPN的ground truth和计算proposals的ground truth时的使用方法。 tf.py_func( func, inp, Tout, stateful=True, name=None)参数:func: 一个Python函数,它接受ndarray对象作为参数并返回一个 重要提示: func的输入和输出numpy ndarrays不能保证是副本。在某些情况下,它们的底层内存将与相应的TensorFlow张量共享。 在没有显式(np.)复制的python数据结构中,就地修改或存储func输入或返回值可能会产生不确定的结果。inp: 一个张量对象的列表。 返回值:func计算的张量或单个张量的列表。
, name); } 但是有些时候,我们希望把一个方法本身当做参数传递给另一个方法,比如 myObject.callMethod(HelloWorld); 在没有委托之前,这是一件极困难的事情,委托出现以后 , name); } } } 二 、匿名方法(.net2.0开始支持) 在“一、委托Delegate”的演示代码中,我们看到委托调用方法前,至少得先定义一个签名相同的方法,然后才能由委托调用 , name); } } } 四、Func Func其实也是一个"托"儿,呵呵,不过这个委托是有返回值的。 public delegate TResult Func<T, TResult>(T arg); } 同Action类似,Func的参数从1到5个,有5个不同的重载版本 代码: using System ; namespace ActionStudy { class Program { static Func<string> F; static Func<DateTime, string
: 调用类中的静态方法有两种形式,而调用public方法第一个参数只能为数组 class Func{ static public function _One(){ $str = $num + 1 : $num; } } echo ""; //调用类的静态方法 var_dump(call_user_func('Func::_One','one')); echo ''; var_dump(call_user_func(['Func','_One'])); $num = 4; $o = new Func; //调用类普通方法 $return = call_user_func int(5) 调用有命名空间的类时call_user_func的用法与上面的同理 //调用静态方法 call_user_func(array(__NAMESPACE__.' \StaticDemo','_One'),100); call_user_func('App\StaticDemo::_One',200); //调用public方法 call_user_func(array
call_user_func_array (callable $callback, array $param_arr) 參数1: 调用一个回调函数, 參数2: 数组參数是回调函数的參数. call_user_func '\F','showName'),'vein'); $f = new F(); echo call_user_func(array($f, 'showName'),'vein'); 情况三:动态方法调用 call_user_func(__NAMESPACE__ . non-static method Foo\F::showAge() should not be called s tatically 解释一下: 这个函数的第一个參数必须是 有效的回调函数, 非静态的方法 总结一下: call_user_func_array 和 call_user_func 两个函数基本上是类似的,仅仅是在调用上传递參数时存在一些差异.
,并为实例绑定多个方法时,每个方法都有一个返回值。 static void Main(string[] args) { Func<string, string> func=a; func + = b; func += c; Console.WriteLine(func("测试")); Console.ReadKey(); static void Main(string[] args) { Func<string, string> func=a; func + = b; func += c; var funclist = func.GetInvocationList(); foreach
private 关键字 最简单的使用 Selector 的情况,就是如上面所列出的,在 NSTimer 中写 selector 为 "moveText",然后我们在同一个文件中,再相应地写一个 func 然而如果你想把它声明为一个 private func,即不希望其他文件调用这个函数,就会出现问题,通俗地讲:private 使得这个函数不能被『外部』调用,而 Selector 对它的调用,实际上就是一种 那么你把这个动态特性再加回来就可以了~ 1.通过 @objc 关键字来使用动态特性 @objc private func moveText(){ // Your Code } 2.通过 dynamic 关键字来让这个函数拥有与 OC 中动态调用时相同的运行时特性(@objc 足矣,这个一般用不上) dynamic private func moveText(){ // Your Code class 关键字 如果你想把这个函数声明为 class func class func moveText(){ // Your Code } 则本文最开始的代码中的 target
先看一看func 的基本构成元素 func (p myType ) funcName ( a, b int , c string ) ( r , s int ) { return } 其中: 关键字———func // 这个是定义函数的关键字 函数拥有者—(p myType) // 这个是此函数的拥有者,下面解释(此项可省略) 方法名———funcName // 这个是定义函数的名字 为特定类型定义函数,即为类型对象定义方法 在Go中通过给函数标明所属类型,来给该类型定义方法,上面的 (p myType) 即表示给myType声明了一个方法, p myType 不是必须的。 func (m *Mssql) Open() (err error) { var conf []string conf = append(conf, "Provider=SQLOLEDB
Predicate Predicate泛型委托:表示定义一组条件并确定指定对象是否符合这些条件的方法。此委托由 Array 和 List 类的几种方法使用,用于在集合中搜索元素。 ,也就是通过委托进行传递方法的方式 查看效果,结果是一样的 ? Func ? 可以很清楚的看出,封装一个带有返回 TResult 参数指定的类型值的方法,它有多个重载。下面我们通过委托来处理一下3*5=15的过程。 声明一个乘法的方法,并且返回字符串,然后调用。 ? <int,int,string> func=new Func<int, int, string>(MultiMethod); string result = func(3, 5)
如果不用call_user_func_array你会怎么做?一些PHP框架可以将$_GET参数自动映射到方法,就是这样实现的。 场景二:用于函数回调 回调函数可能是一个普通函数,可能是类方法,也可能是静态方法。如果使用call_user_func_array,你就不用去判断方法的类型。
$num+1:$num; } } //传递类的静态方法,有两种方式 //(1)种,传递····类名::方法名···· var_dump(call_user_func("Func::_func",'hell = 4; $o = new Func; //传递类普通方法必须用···数组···传递···该类的对象··和···方法名··· $return = call_user_func(array($o,'__func $num +=10; } //普通方法 public function _func(){ return func_get_args();//返回函数的参数 } } //针对静态方法 \类名','方法名')传递类方法,也就是:array('命名空间\类名','方法名') $return = call_user_func(array(__NAMESPACE__.' \类名::方法名' ···传递类方法,也就是:'命名空间\类名::方法名' $return1 = call_user_func('Home\Space::_call',100); var_dump($
0 的时候执行什么,在后面的 Returns 方法是模拟返回值 mock.Setup(func => func(0)).Returns("林德熙是逗比"); 判断用户调用了模拟的方法多少次通过 Verify 方法,在 Verify 方法是调用模拟的方法,在模拟的方法传入参数指定在传入对应参数的时候,此方法调用了多少次 mock.Verify(func => 对象.Xx方法(模拟用户传入的是什么参数), Foo 方法,现在写一下 private void Foo(Func<int, string> func) { var str = func(1 通过 Times.Exactly 可以指定某个方法就被调用某次 mock.Verify(func => func(0), Times.Exactly(2)); 表示这个方法重来没调用过可以使用 Never 请看代码 mock.Verify(func => func(It.IsAny<int>()), Times.Never); 当然还有方法至少被调用多少次,方法最多被调用多少次等,这些很简单
开始分析 1:小明要买一本一个程序员自我修养的书籍(xx书就不买)硬性要求 (这就是要定义委托性质) 代码: private delegate void BuyBook(); 2:附近书店 (委托的方法 的用法 小明又发生疑问了,每次我自己都去书店去拿书,有没有一种方法直接送到我家里呢,那么Func专门提供了这样的服务 Func 解释 封装一个不定具有参数(也许没有)但却返回 TResult 参数指定的类型值的方法 1:我们先看一个没有参数只有返回值的方法 static void Main(string[] args) { Func<string> RetBook = new RetFunc); } 总结 1:Action用于没有返回值的方法(参数可以根据自己情况进行传递) 2:Func恰恰相反用于有返回值的方法(同样参数根据自己情况情况) 3:记住无返回就用 action,有返回就用Func
假设方法有返回值,则使用Func,或者Func<> 假设方法没有返回值,则使用Action,或者Action<> Func<T,TR>(T arg) 參数类型 T 此托付封装的方法的參数类型。 在使用 Func<T,TResult>托付时,不必显式定义一个封装仅仅有一个參数的方法的托付。 下面演示样例简化了此代码,它所用的方法是实例化 Func<T, TResult>托付,而不是显式定义一个新托付并将命名方法分配给该托付。 尤其是,由于 System.Linq命名空间中很多类型方法具有Func<T, TResult>參数,因此能够给这些方法传递 lambda表达式。 这就是折中方法吧。看自己更喜欢哪种了。 小结: 从Func的托付中。我们能够看出,它简化了我们自定义托付带来的繁琐。同一时候它更好的结合了Lamdba的使用。降低了自定义函数的作用。
实际开发中,对于一些耗时较长的操作,我们往往会将其封装成异步方式调用,以加速系统响应或改善用户体验,下面是一个示例: 有一个现成的类MyMath,里面有一个Add方法: 1 public class System.Threading.Thread.Sleep(5000); 7 return a + b; 8 } 9 10 } 对Add方法做下封装 <int> func = () => 10 { 11 return new MyMath().Add(a, b); 12 }; 13 func.BeginInvoke((ar) => 14 { 15 var result = func.EndInvoke }; 38 func.BeginInvoke((ar) => 39 { 40 var result = func.EndInvoke
扫码关注腾讯云开发者
领取腾讯云代金券