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

    函数:

    函数的定义与调用:

    #函数定义
    def my_len():
        """计算s1的长度"""
        s1 = "hello world"
        length = 0
        for i in s1:
            length = length+1
        print(length)
    
    #函数调用  
    my_len()

    1. def 关键字,定义函数,加空格,函数名(变量)。

    2. 函数名+(),就要执行此函数。

    3. 函数是以功能为导向,函数内部尽量不要有 print。

    1, 函数的返回值:

    return

    return 

    函数当中遇到 return程序就会终止,并且也就结束了。

    1, 不写 return 返回 None

    def daxiao():
        if 1 > 0:
            return
    print(daxiao())

    2,return None 返回 None

    def daxiao():
        if 1 > 0:
            return None
    print(daxiao())

    3, 单个值,返回此单值

    def fanc():
        if 1 > 0:
            return'ghg'
    print(fanc())

    4, 将多个值包在元祖中,返回给调用者次元组

    def fanc():
        if 1 > 0:
            return 1,2,3,111,222
    print(fanc())

    2, 函数的参数

    1, 传参: 传参的形式有 形参(形式参数),实参(实际参数)。

    1.1 从实参的角度:

    ① 按位置传参

    def my_max(x,y):
        z = x  if x > y else y
        return z
    r = my_max(10,20)
    print(r)

    ② 按关键字传参

    def my_daxiao(x,y):
        z = x if x > y else y
        return z
    
    r = my_daxiao(x = 20,y = 10)
    print(r)

    ③ 混合传参  关键字参数永远在参数后面

    def my_daxiao(a,b,x,y):
        print(x,y,a,b)
        z = x if x > y else y
        return  z
    r = my_daxiao(1,2,x = 20,y = 10)
    print(r)

    1.2 从形参的角度

    ① 位置参数

      位置参数必须传值

    def my_daxiao(a,b,x,y):
        print(x,y,a,b)
        z = x if x > y else y
        return  z
    #调用 my_daxiao不传递参数
    r = my_daxiao()
    print(r)

    ②默认参数

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

     3, 动态参数(形参)

    位置参数

    3.1 *args(包含在元祖所有的位置参数)

    def fuce(*arge):
        print(arge)
    fuce(1,2,3,'alex',4,5)

    3.2 **kwargs (包含在字典中的所有关键字参数)

    def func(**kwargs):
        print(kwargs)
    func(a = 1,b = 3, c = 5)
    *arge 和 **kwargs 组合
    def
    func(a,b,c,*args,**kwargs): print(a) print(b) print(c) print(args) print(kwargs) func(1,3,5,6,'alex','taibai',x = 2,y = 1,z = 0)

    万能参数:

    def func(*args,**kwargs):
        print(args)
        print(kwargs)
    func(1,2,3,4,name = 'lzg',sex = 'man')

    魔法运算:打散

    def func(*args,**kwargs):
        print(args)
    l1 = [1,2,3,4,5]
    l2 = {'a':1,'b':2}
    func(*l1,*l2,)

    4, 名称空间(命名空间),局部 全部:

    名称空间分三种:

    1, 全局名称空间

    2, 局部名称空间

    3, 内置名称空间

    加载顺序:

    内置命名空间 ——>全局名称空间 ——>局部名称空间

    (函数调用时可用到局部名称空间)

    取值顺序:

           在局部调用:局部命名空间->全局命名空间->内置命名空间

      在全局调用:全局命名空间->内置命名空间

    作用域:按照生效范可以分为全局作用域和局部作用域。

    全局作用域包含:全局名称空间,内置名称空间

    局部作用域包含:局部名称空间

    5,global(全局变量),nonlocal(局部变量)关键字

    global:

    1, 声明一个全局变量。

    2,引用全局变量,并改变(限于字符串,数字)。

    第一种情况:
    def
    func(): global a a = 2 func() print(a)
    第二种情况: count
    = 1 def func(): global count a = 2 func() print(a)

    nonlocal:

    1, 不能修改全局变量

    2,在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层及以下此变量全部发生改变。

    def add_b():
    #     b = 42
    #     def do_global():
    #         b = 10
    #         print(b)
    #         def dd_nonlocal():
    #             nonlocal b
    #             b = b + 20
    #             print(b)
    #         dd_nonlocal()
    #         print(b)
    #     do_global()
    #     print(b)
    # add_b()
    View Code
     
    函数的嵌套:
    def fun2():
        print(222)
        def fun3():
            print(666)
        fun3()
    fun2()
    print(111)
    # def fun2():
    #     print(222)
    #     def fun3():
    #         print(666)
    #     print(444)
    #     fun3()
    #     print(888)
    # print(333)
    # fun2()
    # print(555)
    View Code

     

     

    ---恢复内容结束---

  • 相关阅读:
    super与this的比较
    队列学习小结
    最左原则
    show processlist
    循环
    打印偶数
    发布模块
    eval函数
    文件
    模块
  • 原文地址:https://www.cnblogs.com/lzg-lzg/p/8393893.html
Copyright © 2011-2022 走看看