zoukankan      html  css  js  c++  java
  • python之路——初识函数

    初识函数定义与调用

    1 def mylen(s):
    2     length = 0
    3     for i in s:
    4         length = length+1
    5     print(length)
    6     return length
    View Code

    总结一:

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

       def 是固定的,不能变,必须是连续的def三个字母,不能分开。。。它们要相亲相爱的在一起。

       空格 为了将def关键字和函数名分开,必须空(四声),当然你可以空2格、3格或者你想空多少都行,但正常人还是空1格。

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

       括号:是必须加的,先别问为啥要有括号,总之加上括号就对了!

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

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

    return关键字的作用

      return 是一个关键字,在pycharm里,你会看到它变成蓝色了。你必须一字不差的把这个单词给背下来。

      这个词翻译过来就是“返回”,所以我们管写在return后面的值叫“返回值”

    要研究返回值,我们还要知道返回值有几种情况:分别是没有返回值、返回一个值、返回多个值

    没有返回值

      不写return的情况下,会默认返回一个None:我们写的第一个函数,就没有写return,这就是没有返回值的一种情况。

    #函数定义
    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,def定义函数中一旦遇到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)
    多个返回值的接收
    #python中把用逗号分割的多个值就认为是一个元组。也适用于字符串、列表、字典、集合

    函数的参数

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

    实参与形参

    参数还有分别:

    我们调用函数时传递的这个“hello world”被称为实际参数,因为这个是实际的要交给函数的内容,简称实参。

    定义函数时的s1,只是一个变量的名字,被称为形式参数,因为在定义函数的时候它只是一个形式,表示这里有一个参数,简称形参。  

    传递多个参数

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

    -------------------

    函数进阶

    • 命名空间和作用域
        • 内置命名空间----python解释器
          • 就是pyrhon解释器一启动就可以使用的名字存储在内置命名空间中
          • 内置的名字在启动解释器的时候就被加载在内存里
        • 全局命名空间----我们写的代码但不是函数中的代码
          • 时在程序从上到下被执行的过程中依次添加进内存的
          • 放置了我们设置的所有变量名和函数名
        • 局部命名空间----函数
          • 就是函数内部定义的名字
          • 当调用函数时,才会产生这个命名空间,随着函数执行的结束,这个命名空间就又消失了

    注:在局部,可以使用全局、内置命名空间中的名字

      在全局,可以使用内置命名空间中的名字,但是不能使用局部命名空间中的名字

      在内置,既不嫩局部也不能使用全局的

    在正常情况下,直接使用内置的名字

    当我们在全局定义了和内置名字空间中的名字时,会使用全局的名字

    当全局没有的时候会找上一级内置去调,当全局有的时候就使用自己的

    如果上一级也没有就再往上一级去调用,直到内置的名字空间都没有就报错

    多个函数应该拥有多个独立的局部命名空间,

    作用域

    全局作用域  -- 作用在全局 -- 内置和全局名字空间中的名字都属于全局作用域 --globals

    局部作用域      -- 作用在局部 -- 函数(局部名字空间中的名字属于局部作用域)--locals

    对于不可变数据类型 在局部可以查看全局作用域中的变量

    但是不能直接修改

    如果想要修改,需要在程序一开始添加global声明

    如果在一个局部(函数)内声明了一个global变量,那么这个变量在局部的所有操作将对全局的变量有效

    globals 永远打印全局的名字

    locals 在局部就打印局部的,在全局的就使用全局的 根据所在位置输出

  • 相关阅读:
    2016-02-24 工作日记
    金字塔培训
    你找到自己的路了么?
    你是个成熟的职场人么?
    码农十年总结
    码农十年连载六
    码农十年连载五
    码农十年连载四
    码农十年连载三
    码农十年连载二
  • 原文地址:https://www.cnblogs.com/shi-guang/p/8125548.html
Copyright © 2011-2022 走看看