zoukankan      html  css  js  c++  java
  • Python之函数基础

    1、函数的定义与调用

    函数从大方针上考虑总共分为两种:一种是内置函数,另一种是自定义函数。今天主要讲的是自定义函数。

    s = '金老板小护士'
    #len(s)
    def my_len():  #自定义函数
        i = 0
        for k in s:
            i += 1
        print(i)
    
    length = my_len()
    print(length)

    此函数是为了计算字符串 's' 的长度。分析此函数的格式:

    首先定义函数是def,这个是必须的,后面空一格,再写函数名称,定义函数名称和定义变量的规范一样,后面是冒号。

    其实除了def这一行和后面的缩进,其他的好像就是正常的执行代码。我们来执行一下,哦,好像啥也没发生。

    刚刚我们已经说过,这是把代码装起来的过程。你现在只会往里装,还不会往出拿。那么应该怎么往出拿呢?我来告诉大家:

    mylen()

    是不是很简单?是不是似曾相识?这就是代码取出来的过程。刚刚我们就写了一个函数,并且成功调用了它。

     函数的调用是用mylen(),直接在函数代码后面写上变量名加上(),就可以调用函数了。

    总结:

    定义:def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个":"。

       def 是固定的,不能变。

       空格 为了将def关键字和函数名分开,必须空格。

       函数名:函数名只能包含字符串、下划线和数字且不能以数字开头。虽然函数名可以随便起,但我们给函数起名字还是要尽量简短,并能表达函数功能

       括号:是必须加的!

    注释:每一个函数都应该对功能和参数进行相应的说明,应该写在函数下面第一行。以增强代码的可读性。

    调用:就是 函数名() 要记得加上括号。

    2、函数的返回值

    函数的返回值,关键字是  return 

    返回值也就是return的作用是,有两个作用

    一、可以返回函数值

    二、可以结束一个函数的继续。

    要研究返回值,我们还要知道返回值有几种情况:分别是没有返回值、返回一个值、返回多个值
      返回值的3种情况
        没有返回值 —— 返回None
          不写return
          只写return:结束一个函数的继续
          return None —— 不常用
        返回1个值
          可以返回任何数据类型
          只要返回就可以接收到
          如果在一个程序中有多个return,那么只执行第一个
        返回多个值
          用多个变量接收:有多少返回值就用多少变量接收
          用一个变量接收: 得到的是一个元组

    没有返回值

      不写return的情况下,会默认返回一个None

    #函数定义
    def mylen():
        """计算s1的长度"""
        s1 = "hello world"
        length = 0
        for i in s1:
            length = length+1
        print(length)
    
    #函数调用
    str_len = mylen()
    #因为没有返回值,此时的str_len为None
    print('str_len : %s'%str_len)
    
    不写return

    只写return,后面不写其他内容,也会返回None,有的同学会奇怪,既然没有要返回的值,完全可以不写return,为什么还要写个return呢?这里我们要说一下return的其他用法,

    就是一旦遇到return,结束整个函数

    def ret_demo():
        print(111)
        return
        print(222)
    
    ret = ret_demo()
    print(ret)
    
    只写return

    return None:和上面的两种情况一样,我们一般不这样写。

    def ret_demo():
        print(111)
        return None
        print(222)
    
    ret = ret_demo()
    print(ret)
    
    return None

    返回一个值

          只需在return后面写上要返回的内容即可。

    #函数定义
    def mylen():
        """计算s1的长度"""
        s1 = "hello world"
        length = 0
        for i in s1:
            length = length+1
        return length
    
    #函数调用
    str_len = mylen()
    print('str_len : %s'%str_len)
    
    返回一个值

    注意:return和返回值之间要有空格,可以返回任意数据类型的值

    返回多个值

      可以返回任意多个、任意数据类型的值

    def ret_demo1():
        '''返回多个值''' 
        return 1,2,3,4
    
    
    def ret_demo2():
        '''返回多个任意类型的值'''
        return 1,['a','b'],3,4
    
    ret1 = ret_demo1()
    print(ret1)
    ret2 = ret_demo2()
    print(ret2)
    
    返回多个值

    返回的多个值会被组织成元组被返回,也可以用多个值来接收

    def ret_demo2():
        return 1,['a','b'],3,4
    
    #返回多个值,用一个变量接收
    ret2 = ret_demo2()
    print(ret2)
    
    #返回多个值,用多个变量接收
    a,b,c,d = ret_demo2()
    print(a,b,c,d)
    
    #用多个值接收返回值:返回几个值,就用几个变量接收
    a,b,c,d = ret_demo2()
    print(a,b,c,d)
    
    多个返回值的接收

     3、函数的参数

    上面设置的函数只能单一的适用于一种特定的情况,现在如果想要让我们的函数能够适用于所有的变量,就要设置参数了。

    #函数定义
    def mylen(s1):
        """计算s1的长度"""
        length = 0
        for i in s1:
            length = length+1
        return length
    
    #函数调用
    str_len = mylen("hello world")
    print('str_len : %s'%str_len)
    
    带参数的函数

    mylen函数要计算的字符串是谁,这个过程就叫做 传递参数,简称传参,我们调用函数时传递的这个“hello world”和定义函数时的s1就是参数

    实际参数(实参)和形式参数(形参):

    实参:我们调用函数时,在变量后面的()里加入的参数就是实际参数,简称实参;

    形参:我们定义函数时,在变量后面的()里加入的参数就是形式参数,简称形参。

    传递多个参数

    参数可以传递多个,多个参数之间用逗号分割。

    def mymax(x,y):
        the_max = x if x > y else y
        return the_max
    
    ma = mymax(10,20)
    print(ma)
    View Code
    1 def mymax(x,y):
    2     the_max = x if x > y else y
    3     return the_max
    4 
    5 ma = mymax(10,20)
    6 print(ma)
    View Code
    def mymax(x,y):
        the_max = x if x > y else y
        return the_max
    
    ma = mymax(10,20)
    print(ma)

    参数
    没有参数
      定义函数和调用函数时括号里都不写内容
    有一个参数
      传什么就是什么
    有多个参数
      位置参数,按照顺序对应

    站在实参角度

        1.按照位置传值

    def mymax(x,y):
        #此时x=10,y=20
        the_max = x if x > y else y
        return the_max
    
    ma = mymax(10,20)
    print(ma)
    
    按照位置传参

        2.按照关键字传值

    def mymax(x,y):
        #此时x = 20,y = 10
        print(x,y)
        the_max = x if x > y else y
        return the_max
    
    ma = mymax(y = 10,x = 20)
    print(ma)
    
    按照关键字传参

        3.位置、关键字形式混着用

    def mymax(x,y):
        #此时x = 10,y = 20
        print(x,y)
        the_max = x if x > y else y
        return the_max
    
    ma = mymax(10,y = 20)
    print(ma)
    
    位置、关键字混用传参

    正确用法

          问题一:位置参数必须在关键字参数的前面

          问题二:对于一个形参只能赋值一次

    总结:

    站在实参的角度上:

      按照位置传参

      按照关键字传参

      混着用可以:但是 必须先按照位置传参,再按照关键字传参数

          不能给同一个变量传多个值

    站在形参角度

        位置参数必须传值

    def mymax(x,y):
        #此时x = 10,y = 20
        print(x,y)
        the_max = x if x > y else y
        return the_max
    
    #调用mymax不传递参数
    ma = mymax()
    print(ma)
    
    #结果
    TypeError: mymax() missing 2 required positional arguments: 'x' and 'y'
    
    位置参数必须传参

    默认参数

        1.正常使用

          使用方法

          为什么要有默认参数:将变化比较小的值设置成默认参数

        2.默认参数的定义

    def stu_info(name,sex = "male"):
        """打印学生信息函数,由于班中大部分学生都是男生,
            所以设置默认参数sex的默认值为'male'
        """
        print(name,sex)
    
    
    stu_info('alex')
    stu_info('eva','female')
    
    默认参数

     总结:

    站在形参的角度上

      位置参数:必须传,且有几个参数就传几个值

      默认参数: 可以不传,如果不传就是用默认的参数,如果传了就用传的

    动态参数

      按位置传值多余的参数都由args统一接收,保存成一个元组的形式

    def mysum(*args):
        the_sum = 0
        for i in args:
            the_sum+=i
        return the_sum
    
    the_sum = mysum(1,2,3,4)
    print(the_sum)
    
    *args求和函数应用
    def stu_info(**kwargs):
        print(kwargs)
        print(kwargs['name'],kwargs['sex'])
    
    stu_info(name = 'alex',sex = 'male')

    动态参数有两种:可以接受任意个参数
      *args : 接收的是按照位置传参的值,组织成一个元组
      **kwargs: 接受的是按照关键字传参的值,组织成一个字典
      args必须在kwargs之前

    重要总结:

    只有调用函数的时候

      按照位置传 : 直接写参数的值

      按照关键字: 关键字 = 值


    定义函数的时候:

      位置参数 : 直接定义参数

      默认参数,关键字参数 :参数名 = '默认的值'

      动态参数 : 可以接受任意多个参数

        参数名之前加*,习惯参数名args,

        参数名之前加**,习惯参数名kwargs

      顺序:位置参数, *args,   默认参数,    **kwargs

    函数的注释

    def func():

      ''' 这个函数实现了什么功能

      参数1:

      参数2:

      :return: 是字符串或者列表的长度

      '''

      pass


     

  • 相关阅读:
    JS LeetCode 1423. 可获得的最大点数简单题解
    SpringBoot 学集 (第六章) Docker
    Linux 学记 (第三章)
    Linux 学记 (第二章)
    Linux 学记 (第一章)
    SpringBoot 学集 (第五章) Web开发续
    SpringBoot 学集 (第四章)Web开发
    SpringBoot 学集 (第三章) 日志框架
    SpringBoot 学集 (第二章) 配置文件
    SpringBoot 学集 (第一章)
  • 原文地址:https://www.cnblogs.com/DI-DIAO/p/8117981.html
Copyright © 2011-2022 走看看