美文网首页
Python基础教程系列四:函数与模块一

Python基础教程系列四:函数与模块一

作者: 奇遇Python | 来源:发表于2019-09-25 19:06 被阅读0次

    本节内容分为两部分讲涉及内容有点多:函数及模块,大纲如图所示!


    4.函数和模块.png

    为更好的对整篇进行理解粗略的画了此图


    image.png

    1、函数的定义

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
    编程大师Martin Fowler先生曾经说过:“代码有很多种坏味道,重复是最坏的一种!”,要写出高质量的代码首先要解决的就是重复代码的问题。
    函数的命名规则和前面讲到的变量的命名规则一样

    2、调用函数

    • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
    • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
    • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
    • 函数内容以冒号起始,并且缩进。
    • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
    def 函数名(参数):
            函数体
    #demo
    def hello():
        print('hello')
    def hello1(name):
        print('hello ', name)
    hello()
    hello1('python')
    

    为巩固上节知识点,给出两种用Python计算阶乘的方法(4的阶乘答案为24)

    def factorial(num):
        """
        求阶乘(递归方式)
        :return: num的阶乘
        """
        if (num <= 1 ):
            return 1
        else:
            return factorial(num - 1) * num
    ### 当需要计算阶乘的时候不用再写直接调用已经定义好的函数
    def factorial1(num):
        """
        求阶乘普通方式
        :return: num的阶乘
        """
        result = 1
        if (num <= 1):
            return 1
        else:
            for n in range(1, num + 1):
                result *= n #result =result* n
            return result
    print(factorial1(4))
    

    3、函数参数

    函数可以有参数,也可以没有参数

    • 必需参数 :def demo( name,age)
    • 默认参数:def demo( age=18 )
    • 不定长参数:def demo(*args)

    注意

    • 1、*args 和 **kwargs 主要用于函数定义。
      你可以将不定数量的参数传递给一个函数。不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字。其实并不是必须写成 *args 和 **kwargs。 *才是必须的. 你也可以写成 *ar 和 *k 。而写成 args 和kwargs 只是一个通俗的命名约定。
    • 2、python函数传递参数的方式有两种:
      位置参数(positional argument)
      关键词参数(keyword argument)
    • 3、*args 与 **kwargs 的区别,两者都是 python 中的可变参数:
      *args: 本质是一个 tuple(任何多个无名参数)
      **kwargs :本质上是一个 dict(关键字参数)
      如果同时使用 *args 和 **kwargs 时, *args 参数列要在 **kwargs 之前。

    4、匿名函数

    python 使用 lambda 来创建匿名函数。
    返回值就是该表达式的结果。
    语法:lambda 参数:方法(或三元运算)

    numLambda = lambda a, b : a + b
    print(numLambda(1, 2))  #输出结果为:3
    a = list(range(3))
    print(list(map(lambda x: x * x, a))) # 输出结果为:[0, 1, 4]
    

    5、迭代器

    1、迭代器是访问集合元素的一种方式,可以记住遍历的位置的对象。(字符串、列表、元组、字典、集合都可以被for循环,说明他们都是可迭代的)
    迭代器有两个基本的方法:iter() 生成迭代器和 next()遍历迭代器元素。
    isinstance() 类型判断。isinstance(a,Iterable) 判断a 是否是可迭代对象。

    
    listName = [1, 2, 3, 4]
    nums = iter(listName)   # 创建迭代器对象
    print(next(nums))   # 1输出迭代器的下一个元素
    print(next(nums))   # 2输出迭代器的下一个元素
    listName = [1, 2, 3, 4]
    it = iter(listName)    # 创建迭代器对象
    for x in it:
        print(x, end=" ")
    #输出结果为 1 2 3 4
    class MyNumbers:
        def __iter__(self):
            self.a = 1
            return self
    
        def __next__(self):
            if self.a <= 6:
                x = self.a
                self.a += 1
                return x
            else:
                raise StopIteration  # 用于表示迭代器的完成,防止出现无限循环的情况
    
    myclass = MyNumbers()
    myiter = iter(myclass)
    print(next(myiter))  # 1
    print(next(myiter))  # 2
    print(next(myiter))  # 3
    for x in myiter:
      print(x)
    
    print(isinstance([1, 2, 3], list))  # 判断数据类是否为list
    #循环结果输入只能到6 输出结果为 1 2 3 4 5 6
    

    6、生成器

    使用了 yield 的函数被称为生成器

    def myList(n):
          for i in range(n):
                yield(i)# 把之前的print(i) 换成yield(i)就为生成器了
    print(myList(4))
    for i in myList(4):
        print(i)
    

    相关文章

      网友评论

          本文标题:Python基础教程系列四:函数与模块一

          本文链接:https://www.haomeiwen.com/subject/kkyjuctx.html