QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 6497|回复: 1
打印 上一主题 下一主题

Python中*和**运算

[复制链接]
字体大小: 正常 放大
hfyxr        

2

主题

1

听众

4

积分

  • TA的每日心情
    开心
    2020-5-30 12:37
  • 签到天数: 1 天

    [LV.1]初来乍到

    网络挑战赛参赛者

    跳转到指定楼层
    1#
    发表于 2020-4-15 11:15 手机频道 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    在 Python 中,* 和 ** 具有语法多义性,具体来说是有四类用法。& E2 g4 ?7 N2 R3 t; u

    5 J* U! {0 K% o% H+ X1 r4 V0 K1. 算数运算" t) @2 J4 D7 S2 |/ d5 n
    8 j5 n+ N! d$ o2 e
    *  代表乘法3 o* P3 b& Z% ~# G" n& _/ x' C* w

    5 O2 j+ L& k8 p$ Z$ _0 R4 F+ [, [** 代表乘方
    , V- e/ R1 R8 \- N
    + t" L4 ~" `* ^>>> 2 * 5
    6 w9 Z" e: M  R% |+ r" w10' k1 E  T9 \8 f. o7 x4 X' z! D
    >>> 2 ** 5; j! x5 a* v% C! P- M# R: _
    32# b& f+ k/ B  w8 [& e
    2. 函数形参2 U& t* j7 {+ r: ]
    ' M& c' Q. |' B% }6 ?* g- [
    *args 和 **kwargs 主要用于函数定义。
    ; }1 s5 H0 N, C* m, z
    . L5 K; y2 Y4 M  K, y; H- x你可以将不定数量的参数传递给一个函数。不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字。其实并不是必须写成 *args 和 **kwargs。  *(星号) 才是必须的. 你也可以写成 *ar  和 **k 。而写成 *args 和**kwargs 只是一个通俗的命名约定。9 R9 q1 P- }/ v, L" k7 ^  M. {

    1 W( B$ o( m9 A) D  u  Z5 O( |; m0 ]python函数传递参数的方式有两种:
    " Y9 _6 T! ]3 z  T5 O! h- s! K6 N4 d" m1 b0 y
    位置参数(positional argument)
    " h; L# L3 A# p7 g, y关键词参数(keyword argument)4 ^0 D7 y3 q7 H+ |" b
    *args 与 **kwargs 的区别,两者都是 python 中的可变参数:* v7 v# `5 M0 H! ~! z- V

    / p5 B, o0 u" J/ `" w- E: O3 m*args 表示任何多个无名参数,它本质是一个 tuple
    7 q* [+ O) ?4 v% w3 L& R**kwargs 表示关键字参数,它本质上是一个 dict
    + i. c5 C/ g7 i: A6 N如果同时使用 *args 和 **kwargs 时,必须 *args 参数列要在 **kwargs 之前。* ?2 z* E9 B4 x7 P: N

      `5 H' n- Z" y( H; W6 ^>>> def fun(*args, **kwargs):4 g9 |7 W4 O* k5 {$ P
    ...     print('args=', args)
    - ^9 _  t# H& `  A( `! |...     print('kwargs=', kwargs)
    1 {+ V0 i' d( U$ O- [... . o$ S7 O- X. Y5 K0 l
    >>> fun(1, 2, 3, 4, A='a', B='b', C='c', D='d')* \! t) n# P* p& l" n. V8 j
    args= (1, 2, 3, 4)$ j7 K0 {8 Z1 M4 W
    kwargs= {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}( g( w  L3 n& r( d0 I  }
    使用 *args
    0 z) q* [, G/ ]& U. r9 ^4 q' B; C* M
    >>> def fun(name, *args):7 S1 Q5 L% k) ^) A1 U. M
    ...     print('你好:', name)
    : R! p  N4 r% c$ G+ H' l...     for i in args:: `' X( \  X# Y7 ?
    ...         print("你的宠物有:", i)$ j7 }, p3 ?3 V2 g' f) @
    ... + C3 z% ^3 ^1 H, q3 F* u- u
    >>> fun("Geek", "dog", "cat")
    & S2 f: S* k! i你好: Geek$ Q, T2 z: [: c3 u7 ~7 \" t: j
    你的宠物有: dog
    - R4 k' I) ^+ n# J. J% a' f0 r你的宠物有: cat6 T( [  y) E7 [8 X5 R' s& x
    使用 **kwargs( J4 _+ X' O" j+ I5 e5 c8 O

    # A" U' {2 }# @! Y# J6 O. M- l4 s. P>>> def fun(**kwargs):
    & P+ C% c) b4 R' A...     for key, value in kwargs.items():
    6 V) w6 p& u$ R; D9 S- r' i. d8 k) s...         print("{0} 喜欢 {1}".format(key, value))
    6 i4 Q' f" r7 @% r+ R...
    $ B3 R$ u$ ^- I2 v% |% R7 ~>>> fun(Geek="cat", cat="box")) L/ j: L! E# i- Z: J5 T
    Geek 喜欢 cat
    ' |" T2 P6 e, m  b( {cat 喜欢 box* Q3 Q6 t- ^* c! _# }
    3. 函数实参
    & a( i- x# W$ s4 J! S; T
    ; `" _4 w9 I! b如果函数的形参是定长参数,也可以使用 *args 和 **kwargs 调用函数,类似对元组和字典进行解引用:3 y7 x+ {; o, a2 @4 m% E1 r. r
    7 |, n( _8 e5 }
    >>> def fun(data1, data2, data3):
    ) i$ O$ b& Z6 u8 f6 [...     print("data1: ", data1)- z' ^" V; T1 t* {, E& e, V
    ...     print("data2: ", data2)1 \' K+ D! X# b: W" m
    ...     print("data3: ", data3)
    2 M4 a) g- a0 y/ m; ~) [& i6 V... 7 N9 }; o" [, ~/ W- B, }
    >>> args = ("one", 2, 3)4 a0 n6 Y7 F9 y* x
    >>> fun(*args)
    7 ^( |) @8 }1 Q$ T8 Adata1:  one" e- V3 j' e6 `  }( E2 c
    data2:  2( H7 I  Y% a0 c0 p. k  s' [
    data3:  37 s/ O& I- }0 H% l, U6 `, X( o! a
    >>> kwargs = {"data3": "one", "data2": 2, "data1": 3}5 m8 x. l2 @" h$ r& |) z1 w
    >>> fun(**kwargs)
    ! f% e8 q' S/ Ldata1:  3
    # O# x1 W' o5 g! w/ q. qdata2:  2, L  x4 l$ N) |* y# _8 e( c
    data3:  one5 _$ y- _3 v# |
    4. 序列解包
    % m2 B) ~. Z- |# P) Y( s
    ( `7 R5 ]1 x* O! i序列解包 往期博客有写过,这里只列出一个例子,序列解包没有 **。
    7 |; C  H% I( ~. J  e0 F( n! w3 p7 ?1 x9 a+ S* \" p# P& a
    >>> a, b, *c = 0, 1, 2, 3  
    6 H% d7 ~0 E0 g$ C6 R$ @: J>>> a  $ u/ ]% h5 E# G) x: F' j* a" o, S9 ?
    0  # {2 L: d# p9 [
    >>> b  
    # \& D. b  i/ r0 _6 }1  
    ) u4 [2 k% I" U3 \  E$ w: D3 h! M>>> c  
    1 ?: U/ J- _; c" ~[2,3]6 m7 F( @2 q+ L7 W$ R
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信

    69

    主题

    3

    听众

    661

    积分

    升级  15.25%

  • TA的每日心情
    开心
    2020-9-13 05:34
  • 签到天数: 149 天

    [LV.7]常住居民III

    网络挑战赛参赛者

    群组2013认证赛C题讨论群组

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-4-13 23:58 , Processed in 0.561734 second(s), 55 queries .

    回顶部