什么是lambda函数?它有什么好处?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是lambda函数?它有什么好处?相关的知识,希望对你有一定的参考价值。

编程中提到的 lambda 表达式,通常是在
需要一个函数,但是又不想费神去命名一个函数
...return x*2
...f(3)6
g = lambda x: x*2g(3)6
(lambda x: x*2)(3)61、这是一个lambda函数,它完成同上面普通函数相同的事情。注意这里的简短的语法;没有小括号,
return是默认的,并且函数没有名字,只有将它赋值给变量的变量名。
2、你甚至可以不将lambda函数赋值给一个变量而使用它。这不是举世无双的东西,它只是展示了 lambda 函数只是一个内联函数。
3、lambda函数是风格问题。不一定非要使用它们,任何能够使用它们的地方,都可以定义一个分离的普通的函数,用它来替换。我将它们用在需要封装特殊的,非重用的代码上,用许多小的一行函数不会弄乱我的代码。
4、总之,
lambda函数是一个可以接收任意多个参数(包括可选参数)并且返回单个表达式值的函数。
lambda函数不能包含命令,它们所包含的表达式不能超过一个。不要试图向lambda函数中塞入太多的东西;如果你需要更复杂的东西,应该定义一个普通函数,然后想让它多长就多长。
顺便这里有几件事情需要注意。首先,我们使用了and-or技巧的简单形式,没问题,因为一个lambda函数在一个布尔环境下
总为真。(这并不意味着lambda函数不能返回假值。函数本身总是为真,它的返回值可以为任何值。)
参考技术A

Lambda
表达式是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象,是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包。

而且Lambda表达式非常好用,可以让代码简单、简洁。

Lambda表达式与函数def的区别:

1. def创建的方法是有名称的,而Lambda表达式没有,可以立刻传递;Python
Lambda表达式会创建一个函数对象,但不会把这个函数对象赋给一个标识符,而def则会把函数对象赋值给一个变量。

2. Python
Lambda只是一个表达式,def是一个语句。Lambda表达式运行起来像一个函数,当被调用时创建一个框架对象。Lambda能够出现在Python语法不允许def出现的地方。

3. Lambda表达式“:”后面,只能有一个表达式,def则可以有多个。Lambda表达式内部只能包含一行代码,而命名函数内对此无限制。

4. Lambda表达式可以直接作为Python列表或Python字典的成员,返回Lambda表达式中最后一个表达式的值。

什么是 Android ADB shell“dumpsys”工具,它有什么好处?

【中文标题】什么是 Android ADB shell“dumpsys”工具,它有什么好处?【英文标题】:What's the Android ADB shell "dumpsys" tool and what are its benefits? 【发布时间】:2012-06-27 10:27:49 【问题描述】:

我正在寻找 ADB shell dumpsys 命令的完整列表以及所有命令的完整说明。

我在哪里可以找到这些信息?

【问题讨论】:

【参考方案1】:

什么是 dumpsys,它有什么好处

dumpsys 是一个在设备上运行并转储有关系统服务状态的有趣信息的 android 工具。

明显的好处:

    以简单的字符串表示形式轻松获取系统信息的可能性。 可以将转储的 CPU、RAM、电池、存储统计信息用于 漂亮的图表,它可以让你检查你的应用程序是如何 影响整个设备!

我们可以从 dumpsys shell 命令中检索哪些信息以及如何使用它

如果您运行 dumpsys,您会看到大量的系统信息。但是您只能使用这个大转储的单独部分。

查看 dumpsys 的所有“子命令”:

dumpsys | grep "DUMP OF SERVICE"

输出:

DUMP OF SERVICE SurfaceFlinger:
DUMP OF SERVICE accessibility:
DUMP OF SERVICE account:
DUMP OF SERVICE activity:
DUMP OF SERVICE alarm:
DUMP OF SERVICE appwidget:
DUMP OF SERVICE audio:
DUMP OF SERVICE backup:
DUMP OF SERVICE battery:
DUMP OF SERVICE batteryinfo:
DUMP OF SERVICE clipboard:
DUMP OF SERVICE connectivity:
DUMP OF SERVICE content:
DUMP OF SERVICE cpuinfo:
DUMP OF SERVICE device_policy:
DUMP OF SERVICE devicestoragemonitor:
DUMP OF SERVICE diskstats:
DUMP OF SERVICE dropbox:
DUMP OF SERVICE entropy:
DUMP OF SERVICE hardware:
DUMP OF SERVICE input_method:
DUMP OF SERVICE iphonesubinfo:
DUMP OF SERVICE isms:
DUMP OF SERVICE location:
DUMP OF SERVICE media.audio_flinger:
DUMP OF SERVICE media.audio_policy:
DUMP OF SERVICE media.player:
DUMP OF SERVICE meminfo:
DUMP OF SERVICE mount:
DUMP OF SERVICE netstat:
DUMP OF SERVICE network_management:
DUMP OF SERVICE notification:
DUMP OF SERVICE package:
DUMP OF SERVICE permission:
DUMP OF SERVICE phone:
DUMP OF SERVICE power:
DUMP OF SERVICE reboot:
DUMP OF SERVICE screenshot:
DUMP OF SERVICE search:
DUMP OF SERVICE sensor:
DUMP OF SERVICE simphonebook:
DUMP OF SERVICE statusbar:
DUMP OF SERVICE telephony.registry:
DUMP OF SERVICE throttle:
DUMP OF SERVICE usagestats:
DUMP OF SERVICE vibrator:
DUMP OF SERVICE wallpaper:
DUMP OF SERVICE wifi:
DUMP OF SERVICE window:

一些转储示例和输出

1) 获取所有可能的电池统计信息:

$~ adb shell dumpsys battery

你会得到输出:

Current Battery Service state:
AC powered: false
AC capacity: 500000
USB powered: true
status: 5
health: 2
present: true
level: 100
scale: 100
voltage:4201
temperature: 271 <---------- Battery temperature! %)
technology: Li-poly <---------- Battery technology! %)

2)获取wifi信息

~$ adb shell dumpsys wifi

输出:

Wi-Fi is enabled
Stay-awake conditions: 3

Internal state:
interface tiwlan0 runState=Running
SSID: XXXXXXX BSSID: xx:xx:xx:xx:xx:xx, MAC: xx:xx:xx:xx:xx:xx, Supplicant state: COMPLETED, RSSI: -60, Link speed: 54, Net ID: 2, security: 0, idStr: null
ipaddr 192.168.1.xxx gateway 192.168.x.x netmask 255.255.255.0 dns1 192.168.x.x dns2 8.8.8.8 DHCP server 192.168.x.x lease 604800 seconds
haveIpAddress=true, obtainingIpAddress=false, scanModeActive=false
lastSignalLevel=2, explicitlyDisabled=false

Latest scan results:

Locks acquired: 28 full, 0 scan
Locks released: 28 full, 0 scan

Locks held:

3) 获取 CPU 信息

~$ adb shell dumpsys cpuinfo

输出:

Load: 0.08 / 0.4 / 0.64
CPU usage from 42816ms to 34683ms ago:
system_server: 1% = 1% user + 0% kernel / faults: 16 minor
kdebuglog.sh: 0% = 0% user + 0% kernel / faults: 160 minor
tiwlan_wq: 0% = 0% user + 0% kernel
usb_mass_storag: 0% = 0% user + 0% kernel
pvr_workqueue: 0% = 0% user + 0% kernel
+sleep: 0% = 0% user + 0% kernel
+sleep: 0% = 0% user + 0% kernel
TOTAL: 6% = 1% user + 3% kernel + 0% irq

4)获取内存使用信息

~$ adb shell dumpsys meminfo 'your apps package name'

输出:

** MEMINFO in pid 5527 [com.sec.android.widgetapp.weatherclock] **
                    native   dalvik    other    total
            size:     2868     5767      N/A     8635
       allocated:     2861     2891      N/A     5752
            free:        6     2876      N/A     2882
           (Pss):      532       80     2479     3091
  (shared dirty):      932     2004     6060     8996
    (priv dirty):      512       36     1872     2420

 Objects
           Views:        0        ViewRoots:        0
     AppContexts:        0       Activities:        0
          Assets:        3    AssetManagers:        3
   Local Binders:        2    Proxy Binders:        8
Death Recipients:        0
 OpenSSL Sockets:        0


 SQL
               heap:        0         MEMORY_USED:        0
 PAGECACHE_OVERFLOW:        0         MALLOC_SIZE:        0

如果您想查看所有进程的信息,请使用~$ adb shell dumpsys meminfo

dumpsys 最终是灵活且有用的工具!

如果您想使用此工具,请不要忘记将权限自动添加到您的 android 清单中android.permission.DUMP

尝试测试所有命令以了解有关 dumpsys 的更多信息。快乐倾倒!

【讨论】:

这是来自某处的文档还是只是您自己的实验? 也很不错的是:adb shell dumpsys 活动广播,显示所有广播 从 Kitkat 开始(我认为),“batteryinfo”被替换为“batterystats”,它的输出和用法也似乎有所不同。 dumpsys 非常强大。它报告您通常无法获得的核心 Android 服务的私有值。 不幸的是,它需要 root 或系统级别的权限才能在 java 程序中使用。【参考方案2】:

查看dumpsys和service的源代码,可以通过执行以下命令获取可用服务列表:

adb shell service -l

然后您可以将您感兴趣的服务名称提供给 dumpsys 以获取具体信息。例如(请注意,并非所有服务都提供转储信息):

adb shell dumpsys activity
adb shell dumpsys cpuinfo
adb shell dumpsys battery

正如您在代码中看到的(以及在 K_Anas 的回答中),如果您在没有任何服务名称的情况下调用 dumpsys,它会将所有服务的信息转储到一个大转储中:

adb shell dumpsys

如果您提供了-h 参数,某些服务可以接收有关显示内容的附加参数,例如:

adb shell dumpsys activity -h
adb shell dumpsys window -h
adb shell dumpsys meminfo -h
adb shell dumpsys package -h
adb shell dumpsys batteryinfo -h

【讨论】:

【参考方案3】:

根据official Android information about dumpsys

dumpsys 工具在设备上运行并提供有关 系统服务的状态。

要获取可用服务的列表,请使用

adb shell dumpsys -l

【讨论】:

我不明白为什么这被否决了 - 这是一个有用的链接。可用服务列表-l 适用于我的 Lollipop,但不适用于我的 Jelly Bean。 这个答案有一个指向实际文档的实际指针。我相信这就是 OP 正在寻找的东西 它可能被否决了,因为与三年前给出的 answer 相比没有新信息。【参考方案4】:

我使用 dumpsys 来捕捉应用程序是否崩溃并且进程仍然处于活动状态。我使用它的情况是查找远程机器应用程序是否崩溃。

dumpsys | grep myapp | grep "Application Error" 

adb shell dumpsys | grep myapp | grep Error

或任何有帮助的东西……等等。

如果应用程序未运行,您将一无所获。 当应用程序停止时,Android 会在屏幕上显示一条消息,进程仍处于活动状态,如果您通过“ps”命令或其他任何方式进行检查,您将看到进程状态未显示任何错误或崩溃含义.但是当您单击按钮关闭消息时,应用程序进程将从进程列表中清除。因此很难在应用程序中找到没有任何代码的崩溃状态。 但是 dumpsys 可以帮助您。

【讨论】:

以上是关于什么是lambda函数?它有什么好处?的主要内容,如果未能解决你的问题,请参考以下文章

什么是lambda?有什么好处

python面试

python知识点

什么是 Scala 中的类型 lambda,它们有什么好处?

什么是 Android ADB shell“dumpsys”工具,它有什么好处?

软件测试阶段那个最重要?是单元测试,那它有什么好处呢