QQ登录

只需要一步,快速开始

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

Python中*和**运算

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

2

主题

1

听众

4

积分

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

    [LV.1]初来乍到

    网络挑战赛参赛者

    跳转到指定楼层
    1#
    发表于 2020-4-15 11:15 手机频道 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    在 Python 中,* 和 ** 具有语法多义性,具体来说是有四类用法。
    0 \! G3 I  |7 T+ B2 e
    + B  F) s' A7 E& S0 J1. 算数运算
    3 w3 ~. G2 J! G& M% i$ C) [3 e$ i" ^  \& W
    *  代表乘法( [0 ~- [( v: _5 M! G+ r
    # B$ E% `! i! S  d0 G9 O: K
    ** 代表乘方2 v0 ]9 i2 J7 V2 i
    0 M$ z0 ~5 Q9 V/ z8 I. b" A2 V% }
    >>> 2 * 5
    8 ?6 D# n5 ]6 ]10
    " u+ F# j% }% [$ p! `>>> 2 ** 59 h( _- @+ g! J0 M1 U+ o
    327 c+ {8 z1 l$ M# A9 q8 U# p
    2. 函数形参
    # B! r+ x/ f, _8 U+ z9 E5 b
    0 Q3 H% G6 J3 G- y3 ^  k* C*args 和 **kwargs 主要用于函数定义。/ J. R2 \7 Q2 G! W/ l
    4 p; L7 \& m- O4 o) }* t
    你可以将不定数量的参数传递给一个函数。不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字。其实并不是必须写成 *args 和 **kwargs。  *(星号) 才是必须的. 你也可以写成 *ar  和 **k 。而写成 *args 和**kwargs 只是一个通俗的命名约定。% Z+ v; p6 @0 A1 ^
    3 x! s! l, b: R; r; J
    python函数传递参数的方式有两种:( J$ o' @4 M, _! P" x) K, r
    ) I5 M. @' h/ C5 D" C3 V
    位置参数(positional argument)( [2 q  u) e) I9 h+ ^6 o
    关键词参数(keyword argument)
    : }& g' w$ H7 T( P5 w*args 与 **kwargs 的区别,两者都是 python 中的可变参数:
    . Q9 T6 F2 m# @$ a( ], C1 L
    2 N2 d' D2 u" Q% G  ]2 ?" }) j3 W*args 表示任何多个无名参数,它本质是一个 tuple
    : f0 M1 ]2 Y2 t7 M**kwargs 表示关键字参数,它本质上是一个 dict1 z5 H. W, h( k  }" T
    如果同时使用 *args 和 **kwargs 时,必须 *args 参数列要在 **kwargs 之前。- C: @  W! Y' Z# o2 d1 c  w* \
    $ f/ E4 Z9 b1 S7 P
    >>> def fun(*args, **kwargs):$ d" _+ R" u2 s" s' i. {
    ...     print('args=', args)( M8 o( @- Z+ _6 g! G5 ~" ?" t
    ...     print('kwargs=', kwargs)
    ; a) B' a& Z2 }( g2 r/ u0 z  V... - k2 Q/ {& k  B: h* R! a( c! S% W
    >>> fun(1, 2, 3, 4, A='a', B='b', C='c', D='d')/ g; c- L* ~% i6 p8 r5 c* G
    args= (1, 2, 3, 4)
    3 a7 C' ?2 ]# B0 o6 Akwargs= {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}5 C. `. T* V: }, l9 n3 H
    使用 *args
    8 ]6 R2 D- e5 z' v" f7 D. A/ s1 c  g7 y' B2 o
    >>> def fun(name, *args):9 M4 }$ K5 u9 u! ~3 U
    ...     print('你好:', name)
    : O! a9 o; G) x& @  H; r+ Y...     for i in args:1 s" `1 {8 h+ ?. X( B( U
    ...         print("你的宠物有:", i)
    & z5 `* O/ A2 m, z...
    # v+ G( a8 w5 p  c1 `! ~* E$ l>>> fun("Geek", "dog", "cat")
    ( d: V1 v* A+ |5 {你好: Geek. Z" C5 s. N! }! {" |3 X
    你的宠物有: dog2 S7 D$ z5 w' h# s
    你的宠物有: cat
    9 u# o: u) k2 A% j, _4 S使用 **kwargs
    ( }/ R, v: W5 I6 W3 i( a) h1 O9 u4 y# G. l2 r$ l" i/ G5 @
    >>> def fun(**kwargs):% v, v1 ?/ T6 h6 j$ C
    ...     for key, value in kwargs.items():
    : B$ ?$ ]: A7 |4 r2 f  b. N...         print("{0} 喜欢 {1}".format(key, value))) ]. F, P1 n5 C2 I# W9 r
    ... : O" `) k7 s* E. t$ R
    >>> fun(Geek="cat", cat="box")9 o8 |5 `9 Q* ~- W1 n
    Geek 喜欢 cat! e) ^7 B6 l/ L! q6 i4 C* ~) n
    cat 喜欢 box
    % C" e* W  _) O: y3. 函数实参1 w8 V: W' K1 c. u

    ( y: v; V; ], D7 T如果函数的形参是定长参数,也可以使用 *args 和 **kwargs 调用函数,类似对元组和字典进行解引用:( W5 A. k& z" T$ {1 m* Y0 e( p

    , R+ j8 X- E8 S1 Y# I" {>>> def fun(data1, data2, data3):
    9 j8 y1 f$ Q& |4 q9 B+ Z...     print("data1: ", data1)& O3 k1 [. O6 B5 X& [6 V/ }
    ...     print("data2: ", data2). ?- W: q# U. T7 n" z8 Z! ^
    ...     print("data3: ", data3)9 z$ P/ g5 a  Q
    ...
    : W" a7 S: R1 x) M$ w! J! @3 Y1 Q8 h>>> args = ("one", 2, 3)
    . |  \: }7 t1 t0 A5 X2 C! n) Q>>> fun(*args)' j( x+ ~* j! [9 s1 ^, m; Q
    data1:  one
    ; I6 H0 O( ?; Z4 B6 Bdata2:  2( v$ ]& C" f2 H( @* {5 d( ?: z
    data3:  3
    ; N" a0 {( r" D" {>>> kwargs = {"data3": "one", "data2": 2, "data1": 3}8 F! b# b( E. F
    >>> fun(**kwargs)
    8 W$ z7 d' N4 N% _: m! adata1:  3
    % [2 z0 f( x. y+ m/ F  Qdata2:  2
    ( E9 g( T6 E: ^* d, v% h0 v4 _data3:  one6 O; r7 c, i: z8 K' I4 u. N, }9 j
    4. 序列解包
    : m: g2 u* }: N  h" [2 v# u5 ?+ }7 W% `
    序列解包 往期博客有写过,这里只列出一个例子,序列解包没有 **。
    5 z8 w) U0 @) o4 [' F
    , A* f% q8 N7 ?0 f>>> a, b, *c = 0, 1, 2, 3  
    ) ?# ^% S, l. f: [1 K) I, _8 v>>> a  
    , W1 q# M$ B0 o2 p0 r9 L0  
    ' p) H" O2 |# [>>> b  
    ! p- u2 D5 D6 m& s+ }* w1  
    " G! d7 \( w7 \4 K4 Z>>> c  6 V5 b5 g7 E7 k" b; Z. Q: {
    [2,3]
    / \2 v- c4 C5 y. [1 y0 H# k5 M
    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-7-21 01:35 , Processed in 0.327626 second(s), 55 queries .

    回顶部