zoukankan      html  css  js  c++  java
  • Python学习06_函数和模块的使用

    引入

    在写有些代码的时候,会发现有些步骤重复了多次,他也不像循环,都是相同的东西在重复,而是指做某件事情的步骤方法,做事的人或对象发生了改变,但是方法却没有改变。

    要想写出高质量的代码,首先要解决的就是重复代码的问题。我们可以将某些解决问题的步骤,封装在一个称之为“函数”的功能模块中,当需要重复使用的时候,再调用这个“函数”就可以了。

    定义函数

    在Python中,使用关键字def来定义函数,函数的名字的命名规则和变量名的命名规则是一样的。在函数名后面的圆括号中放置传递给函数的参数,可以理解成要对什么样的东西产生影响,类似数学上函数的自变量。在函数完成后可以通过return关键字返回一个值。

    请说出下面的方程有多少组正整数解。

    $$x_1 + x_2 + x_3 + x_4 = 8$$

    实上,上面的问题等同于将8个苹果分成四组每组至少一个苹果有多少种方案。想到这一点问题的答案就呼之欲出了。

    可以用Python的程序来计算出这个值,代码如下所示。

    """
    函数
    """
    
    
    def jc(n):
        ans = 1
        for i in range(1, n+1):
            ans *= i
        return ans
    
    m = int(input('请输入m的值:'))
    n = int(input('请输入n的值:'))
    
    
    print(jc(m) // jc(n) // jc(m-n))
    
    

    image-20210126212901601

    函数的参数

    在Python中,函数的参数可以有默认值,也支持使用可变参数。

    """
    函数参数
    """
    def add(a=0,b=0,c=0):
        return a+b+c;
    
    print(add())
    print(add(1))
    print(add(1,2))
    print(add(1,2,3))
    
    print(add(c=50,a=100,b=200))
    
    

    image-20210126214441247

    当我们在不确定参数个数的时候,我们可以使用可变参数。

    """
    函数参数
    """
    
    
    def add(*args):
        total = 0
        for var in args:
            total += var
        return total
    
    
    print(add())
    print(add(1))
    print(add(1, 2))
    print(add(1, 2, 3))
    
    print(add(1, 3, 5, 7, 9))
    
    

    image-20210126214713374

    使用模块管理函数

    当出现同一个.py文件中定义了两个同名的函数,应为不存在重载的概念,后一个定义会覆盖之前的定义。

    解决命名冲突,除了使用不同的命名外。我们也能使用模块来进行管理,这一点在多人协作开发时很有用。在Python中,每个文件就代表了一个模块,在使用函数的时候,我们通过impirt关键字导入执行的模块就可以区分到底要使用的是那个模块中的函数。

    day0604.py

    def foo():
        print('hello,world!')
    
    

    day0605.py

    def foo():
        print('goodbye,world!')
    
    

    day0606.py

    import day0604 as m1
    import day0605 as m2
    
    m1.foo()
    m2.foo()
    

    image-20210126220453137

    要说明的是,如果我们导入的模块除了定义函数之外还中有可以执行代码,那么Python解释器在导入这个模块时就会执行这些代码,事实上我们可能并不希望如此,因此如果我们在模块中编写了执行代码,最好是将这些执行代码放入如下所示的条件中,这样的话除非直接运行该模块,if条件下的这些代码是不会执行的,因为只有直接执行的模块的名字才是"__main_"

    day0607.py

    def foo():
        pass
    
    
    def bar():
        pass
    
    
    # __name__是Python中一个隐含的变量它代表了模块的名字
    # 只有被Python解释器直接执行的模块的名字才是__main__
    if __name__ == '__main__':
        print('call foo()')
        foo()
        print('call bar()')
        bar()
    

    练习

    练习一

    实现计算求最大公约数和最小公倍数的函数

    def gcd(x, y):
        if y == 0:
            return x
        return gcd(y, x % y)
    
    
    def lcm(x, y):
        return x*y//gcd(x, y)
    
    if __name__ == '__main__':
        a = int(input('输入a:'))
        b = int(input('输入b:'))
    
        print('%d和%d的最大公约数:%d'%(a,b,gcd(a,b)))
        print('%d和%d的最小公倍数:%d'%(a,b,lcm(a,b)))
    

    image-20210126222424523

    练习二

    判断一个数是不是回文数的函数

    def reser(num):
        _num=0
        while num!=0:
            _num=_num*10+num%10
            num//=10
        return _num
    def isPalindrome(num):
        _num=reser(num)
        # print(_num)
        return _num==num
    if __name__ == '__main__':
        x = int(input('请输入x:'))
        if isPalindrome(x)==True:
            print('是回文数')
        else:
            print('不是回文数')
    

    image-20210126223231018

    练习三

    实现判断一个数是不是素数的函数

    def is_prime(num):
        if num<2:
            return False
        for i in range(2,num//2):
            if num%i==0:
                return False
        return True
    if __name__ == '__main__':
        x=int(input('请输入x:'))
        if is_prime(x):
            print('是质数')
        else:
            print('不是质数')
    

    image-20210126223704138

    练习四

    写一个程序判断输入的正整数是不是回文素数

    import day0610 as m1
    import day0609 as m2
    if __name__ == '__main__':
        x=int(input('请输入x:'))
        if m1.is_prime(x) and m2.isPalindrome(x):
            print('是回文质数')
        else:
            print('不是回文质数')
    

    image-20210126225511848

    不积硅步,无以至千里。
  • 相关阅读:
    吴恩达深度学习笔记 course2 week1 作业1
    吴恩达深度学习笔记 course2 week1 测验
    吴恩达深度学习笔记 course 2 1.1~1.14 深度学习的实用层面
    吴恩达深度学习笔记第四章作业2
    开发中经常遇到SVN清理失败的问题:
    UE4编程之C++创建一个FPS工程(一)创建模式&角色&处理输入
    Unreal Engine 4 C++ UCLASS构造函数易出错分析
    光照构建失败。Swarm启动失败
    ue4 C++ 生成并弹出一个菜单
    解决SVN Cleanup错误: Failed to run the WC DB work queue associated with
  • 原文地址:https://www.cnblogs.com/wyloving/p/14332870.html
Copyright © 2011-2022 走看看