zoukankan      html  css  js  c++  java
  • 初识函数

    自定义函数:可以在任何需要它的地方调用

    s = "测量字符串长度"
    def my_len():        #函数定义
         i = 0
         for k in s:
             i += 1
         return i        #写在return后面的叫:返回值
    length = my_len()    #函数调用
    print(length)

    return的作用:

    1. 一旦遇到return, 结束整个函数
    2. return和返回值之间要有空格, 可以返回多个任意数据类型的值

    返回值的3种情况:

    没有返回值: --> 返回None
      没写return
      只写return --> 结束一个函数的继续
      return None #不常用
    返回1个值:
      可以返回任何数据类型
      只要返回就可以接收到
      如果在一个程序中有多个return, 那么只执行第一个
    返回多个值:
      用多个变量接收 --> 有多少返回值就用多少变量接收
      用一个变量接收 --> 得到的是一个元组

    函数的参数:

    没有参数
      定义函数和调用函数时括号里都不写内容
    有一个参数
      传什么就是什么
    有多个参数
      形参(接收时): 位置参数、默认参数
      实参(传递时): 位置参数、关键字参数
    def my_len(s):  #()用来接收参数、这里的变量"s"被称为:形式参数(形参)
        i = 0
        for k in s:
            i += 1
        return i
    length = my_len("hello world")  #这个过程叫:传递参数(传参)、这里的"hello world"被称为:实际参数(实参)
    print(length)
    def my_sum(a,b):     #a、b位置形参
        print(a,b)
        res = a+b
        return res
    ret = my_sum(1,2)    #1、2位置实参
    print(ret)
    def classmate(name, sex):    #位置形参
        print("%s : %s" % (name, sex))
    classmate("ppd", "")       #位置实参
    classmate(sex="", name="ppd")    #关键字实参
    def classmate(name, sex=""):    #name位置形参, sex="男" 为默认形参,如果传了就用传的,否则用默认的
        print("%s : %s" % (name, sex))
    classmate("ppd")        #位置实参
    classmate("Lisa", sex="")       #Lisa位置实参, sex="女"关键字实参

    站在形参的角度上:

    位置参数:必须传,且有几个参数就传几个值
    默认参数:可以不传,如果不传就是用默认的参数,如果传了就用传的

    站在实参的角度上:

    按照位置传参    # 1、2
    按照关键字传参  # a=1、b=2
    混着传参       # 可以,但是,必须先按照位置传参,再按照关键字传参数 --> 1、b=2
       不能给同一个变量传多个值

    定义函数的时候:先定义位置参数、再定义默认参数

    # 位置参数
        直接定义参数
    # 默认参数/关键字参数
        参数名 = "默认的值"
    # 动态参数 
        可以接受任意多个参数
        参数名之前加*,习惯参数名args
        参数名之前加**,习惯参数名kwargs
    # 动态参数有两种:可以接受任意个参数
        *args          接收多个按照位置传参的值, 组织成一个元组
        **kwargs     接收多个按照关键字传参的值, 组织成一个字典        
    # 接收参数顺序
        位置参数,*args,默认参数,**kwargs(args必须在kwargs之前)
        示例:

    接收各种参数示例:

    def func(name, *args, gender="", **kwargs):
        print(name)    # pd
        print(args)    # (1, 'a')
        print(gender)  #
        print(kwargs)  # {'weight': '60kg', 'height': 172}
    
    func("pd", 1, "a", gender="", height=172, weight="60kg")

    如果列表或字典作为实参,可以通过 *列表 或 **字典  按照顺序打散,然后传递过去:

    def func1(*args):
        print(args)  # (1, 2, 3)
    func1(*[1, 2, 3])
    
    def func2(**kwargs):
        print(kwargs)  # {'k1': 'v1', 'k2': 'v2'}
    func2(**{"k1": "v1", "k2": "v2"})

     默认参数的陷阱:如果默认参数的值是一个可变数据类型,那么每一次调用函数的时候,如果这个默认参数没有接收到值,就共用这个数据类型的资源。

    def func(k, dic={}):
        dic[k] = "v"
        print(dic)
    func(1)    #{1: 'v'}
    func(2)    #{1: 'v', 2: 'v'}
    func(3)    #{1: 'v', 2: 'v', 3: 'v'}
    def func(lis=[]):
        lis.append(1)
        print(lis)
    func()    #[1]
    func()    #[1, 1]
    func()    #[1, 1, 1]

    其他:

    def func():
        """这是一个完成XX功能的函数"""
    
    print(func.__name__)  # 查看字符串格式的函数名
    print(func.__doc__)

  • 相关阅读:
    .net core实现的全程序跟踪
    gmap.net
    Spring Cloud实践:降级、限流、滚动、灰度、AB、金丝雀的实现思路
    服务的协作:服务间的消息传递——《微服务设计》读书笔记
    使用消息系统进行微服务间通讯时,如何保证数据一致性
    How to distribute a database among microservices
    微服务间如何选择推送和拉取数据
    Android 怎么使用Bitmap+Canvas 自适应屏幕
    Android 音乐播放器之--错误状态下调用导致的异常
    Android应用截图和SurfaceView截图问题总结
  • 原文地址:https://www.cnblogs.com/believepd/p/9551588.html
Copyright © 2011-2022 走看看