[重学Python]Day3 函数和模块的使用

[重学Python]Day3 函数和模块的使用

    • 一、函数的作用
    • 二、定义函数
    • 三、函数的参数
    • 四、用模块管理函数
    • 五、练习
      • (一)实现计算最大公约数和最小公倍数的函数
      • (二)、实现判断一个数是不是回文数的函数
      • (三)、实现判断一个数是不是素数的函数
      • (四)、写一个程序判断输入的正整数是不是回文素数

项目链接:https://github.com/jackfrued/Python-100-Days

一、函数的作用

“代码有很多种坏味道,重复是最坏的一种”

为了解决重复代码的问题,我们可以封装重复的代码到“函数”的功能模块中,在需用使用该功能的地方,我们只需要“调用”这个“函数”就可以了。

二、定义函数

在Python中可以使用def关键词来定义函数,和变量一样每个函数都有自己的名字,命名规则与变量的命名规则一致,在函数后面的园括号中可以放置传递给函数的参数,程序中函数的参数就相当于数学中提到的自变量,而函数执行完成后我们可以通过return来返回一个值

三、函数的参数

函数是绝大多数编程语言中都支持的一个代码的"构建块",但是Python中的函数与其他语言中的函数还是有很多不太相同的地方,其中一个显著的区别就是Python对函数参数的处理。在Python中,函数的参数可以有默认值,也支持使用可变参数,所以Python并不需要像其他语言一样支持函数的重载,因为我们在定义一个函数的时候可以让它有多种不同的使用方式,下面是两个小例子。

from random import randint# roll dice
def roll_dice(n = 2):total = 0for _ in range(n):total +=  randint(1,6)return total#sum of 3 num
def add(a = 0, b = 0, c = 0):return a + b + c# 如果没有指定参数那么使用默认值摇两颗色子
print(roll_dice())
# 摇三颗色子
print(roll_dice(3))
print(add())
print(add(1))
print(add(1, 2))
print(add(1, 2, 3))
# 传递参数时可以不按照设定的顺序进行传递
print(add(c=50, a=100, b=200))

给上面两个函数的参数都设定了默认值,意味着当调用函数时没有传入参数的值这时将使用参数的默认值,所以在上面的代码我们可以用各种不同的方式去条用add函数,这和其他很多语言中函数重载的效果一致。

优化上述add函数。假设我们对0个或者多个参数进行加法运算,而具体由多少个参数是由调用者来决定的,我们作为函数的设计者对这一点是一无所知的,因此不确定参数个数时,我们可以使用可变参数。

# * indicates this parameter is a variable paramber
def add(*args):total = 0for _ in args:total += _return totalprint(add())
print(add(1))
print(add(1, 2))
print(add(1, 2, 3))
print(add(1, 3, 5, 7, 9))

四、用模块管理函数

同名函数问题,由于python中没有函数重载概念,为了避免后面定义的函数覆盖之前的函数,所以我们要使用模块对函数进行管理,例如下面的情况

def foo():print('hello world')def foo()print('goodbye world')foo()

解决方式:Python中每个文件代表了一个module,在不同module中可以有同名的函数,在使用函数时我们通过import导入指定module即可。

module1.py

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

module2.py

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

test.py

from module1 import foo# 输出hello, world!
foo()from module2 import foo# 输出goodbye, world!
foo()

也可以按照如下所示的方式来区分到底要使用哪一个foo函数。

test.py

import module1 as m1
import module2 as m2m1.foo()
m2.foo()

但是如果将代码写成了下面的样子,那么程序中调用的是最后导入的那个foo,因为后导入的foo覆盖了之前导入的foo

test.py

from module1 import foo
from module2 import foo# 输出goodbye, world!
foo()

我们在导入的module中除了定义的函数可能还有其它可执行代码,当我们import时会执行这些代码,当我们不需要执行这些代码时,就需要将它们放入if条件

module3.py

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

test.py

import module3# 导入module3时 不会执行模块中if条件成立时的代码 因为模块的名字是module3而不是__main__

五、练习

(一)实现计算最大公约数和最小公倍数的函数

'''最大公约数 greatest common divisor最小公倍数 least common multiple'''
def gcd_lcm(a, b):# 计算最大公约数gcd = abs(a) % abs(b)while gcd!= 0:a, b = b, gcdgcd = abs(a) % abs(b)# 计算最小公倍数lcm = abs(a) * abs(b) // gcdreturn gcd, lcm

在上述代码中,定义了一个名为 gcd_lcm 的函数,它接受两个整数 ab 作为参数。函数内部使用循环计算出两个数的最大公约数 gcd,然后根据最大公约数计算出最小公倍数 lcm,最后返回最大公约数和最小公倍数。你可以根据实际需求调用这个函数来计算最大公约数和最小公倍数。

(二)、实现判断一个数是不是回文数的函数

def is_palindrome(n):# 将数字转换为字符串str_n = str(n)# 反转字符串reverse_str = str_n[::-1]# 比较原字符串和反转后的字符串是否相等return str_n == reverse_str

在上述代码中,定义了一个名为 is_palindrome 的函数,它接受一个整数 n 作为参数。首先,将整数转换为字符串,然后通过切片操作 [::-1] 反转字符串,最后比较原字符串和反转后的字符串是否相等,如果相等则返回 True,表示是回文数,否则返回 False。你可以根据需要调用这个函数来判断一个数是否为回文数。

(三)、实现判断一个数是不是素数的函数

def is_prime(n):if n <= 1:return Falseif n <= 3:return Trueif n % 2 == 0 or n % 3 == 0:return Falsei = 5while i * i <= n:if n % i == 0 or n % (i + 2) == 0:return Falsei += 6return True

在上述代码中,定义了一个名为 is_prime 的函数,它接受一个整数 n 作为参数。首先判断 n 是否小于等于 1,如果是,则返回 False,表示不是素数。接着判断 n 是否小于等于 3,如果是,则返回 True,因为 2 和 3 都是素数。然后判断 n 是否能被 2 或 3 整除,如果能,则返回 False。接下来,从 5 开始,每次增加 6,直到 i 的平方大于 n 为止。在循环中,如果 n 能被 ii+2 整除,则返回 False。如果循环结束后都没有返回 False,则说明 n 是素数,返回 True

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

def is_palindromic_prime(n):# 先判断是否为素数if not is_prime(n):return False# 再判断是否为回文数str_n = str(n)reverse_str = str_n[::-1]if str_n!= reverse_str:return Falsereturn Truedef is_prime(n):if n <= 1:return Falseif n <= 3:return Trueif n % 2 == 0 or n % 3 == 0:return Falsei = 5while i * i <= n:if n % i == 0 or n % (i + 2) == 0:return Falsei += 6return Truenum = int(input("请输入一个正整数:"))
if is_palindromic_prime(num):print(f"{num} 是回文素数。")
else:print(f"{num} 不是回文素数。")

这段代码首先定义了两个函数 is_primeis_palindromic_primeis_prime 函数用于判断一个数是否为素数,is_palindromic_prime 函数用于判断一个数是否为回文素数。

然后,程序通过 input 函数获取用户输入的正整数,并将其存储在变量 num 中。最后,调用 is_palindromic_prime 函数判断 num 是否为回文素数,并输出相应的结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/818010.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

专业SEO优化指南:设置网站关键词的详细步骤

在网站SEO优化的过程中&#xff0c;关键词的设置是提升网站排名的关键步骤之一。那么&#xff0c;作为一名专业的SEO人员&#xff0c;如何有效地进行关键词设置呢&#xff1f;以下是一些详细的步骤&#xff1a; 1. 确定网站的核心关键词。 这需要深入理解网站的主题或产品。通…

整体性学习

整体性学习的顺序&#xff1a; 1.获取 2.理解&#xff08;明白&#xff09;3.拓展&#xff08;探究&#xff09;4.纠错&#xff08;调试&#xff09;5.应用 测试伴随每一个过程 例如&#xff1a; 吃饭&#xff08;去学习&#xff09;–>点菜&#xff08;学什么&#xff0c…

实时数据同步之Maxwell和Canal

文章目录 一、概述1、实时同步工具概述1.1 Maxwell 概述1.2 Canal概述 2、数据同步工作原理2.1 MySQL 主从复制过程2.2 两种工具工作原理 3、MySQL 的 binlog详解3.1 什么是 binlog3.2 binlog 的开启3.3 binlog 的分类设置 4、Maxwell和Canal对比5、环境安装 二、Maxwell 使用1…

日本极致产品力|一个战略符号打造年销售超4亿份的冰淇淋大单品

日本赤城乳业有一款冰棍——ガリガリ君(GariGarikun)&#xff0c;凭借着自己的“纯粹”打入市场&#xff0c;几十年来它成为许多日本人的夏日必备。他让人记忆最深刻的是战略符号——ガリガリ君&#xff0c;让赤城乳业打造出年销售4亿份的冰淇淋大单品。它是如何做到的呢? 石油…

Django——CBV源码解析

Django——CBV源码解析 以下是views模块调用as_view()方法的代码示例 # urls.py from django.contrib import admin from django.urls import path import app.viewsurlpatterns [path(admin/, admin.site.urls),path(app/, app.views.task.as_view()), ]# views.py class t…

Day55 动态规划 part15

Day55 动态规划 part15 392.判断子序列 我的思路&#xff1a; 自己还是只能想到双指针法 解答: class Solution {public boolean isSubsequence(String s, String t) {if(s.length() 0) {return true;}if(s.length() > t.length() || t.length() 0) {return false;}ch…

性能再升级!UNet+注意力机制,新SOTA分割准确率高达99%

UNet结合注意力机制能够有效提升图像分割任务的性能。 具体来说&#xff0c;通过将注意力模块集成到UNet的架构中&#xff0c;动态地重新分配网络的焦点&#xff0c;让其更集中在图像中对于分割任务关键的部分。这样UNet可以更有效地利用其跳跃连接特性&#xff0c;以精细的局…

VMware安装Linux虚拟机(rocky9)

软件准备&#xff1a; VMware虚拟机ISO系统镜像文件 选择创建虚拟机→典型→下一步→点击稍后安装操作系统 选择Linux系统和对应版本 输入虚拟机名称和选择保存位置 设置磁盘大小 根据需要自定义硬件配置→完成 然后点击编辑虚拟机设置→CD/DVD→选择ISO镜像 然后开启虚拟机→…

动态规划|343.整数拆分

力扣题目链接 class Solution { public:int integerBreak(int n) {vector<int> dp(n 1);dp[2] 1;for (int i 3; i < n ; i) {for (int j 1; j < i / 2; j) {dp[i] max(dp[i], max((i - j) * j, dp[i - j] * j));}}return dp[n];} }; 思路 看到这道题目&…

【GD32】 2.39 FR1002人脸识别模块

2.39 FR1002人脸识别模块 FR1002人脸识别模组解决方案以高性能应用处理器为硬件平台&#xff0c;配合双目传感器进行活体检测&#xff0c;具有启动速度快、金融级的识别能力、超低使用功耗等特点。凭借超低功耗、强大的运算速度&#xff0c;在多种应用领域中&#xff0c;为各行…

关于《CS创世 SD NAND》的技术学习分享

最近发现一个好玩的东西《CS创世 SD NAND》&#xff0c;带大家一起体验一下。 本文引用了部分厂家产品资料及图像&#xff0c;如有侵权&#xff0c;请及时联系我删除&#xff0c;谢谢。 《CS创世 SD NAND》官方网站&#xff1a;http://www.longsto.com/ 什么是CS创世 SD NAND呢…

0基础刷图论最短路 1(从ATcoder 0分到1800分)

ATC最短路1 &#xff08;本文难度rated 0~ 1000&#xff09; 题目来源&#xff1a;Atcoder 题目收集&#xff1a; https://atcoder-tags.herokuapp.com/tags/Graph/Shortest-Path &#xff08;里面按tag分类好了Atcoder的所有题目&#xff0c;类似cf&#xff09; &#xff08;…

Linux 关闭交换分区(swap)

安装Doris、ElasticSearch等服务的时候&#xff0c;Linux交换分区会给这些服务带来很严重的性能问题&#xff0c;需要在安装之前禁用交换分区。 1 查看交换分区信息 首先&#xff0c;使用 swapon --show 或 cat /proc/swaps 命令来查看当前的交换分区状态。它会列出所有当前启…

【300套】基于Springboot+Vue的Java实战开发项目(附源码+演示视频+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f9e1;今天给大家分享300的Java毕业设计&#xff0c;基于Springbootvue框架&#xff0c;这些项目都经过精心挑选&#xff0c;涵盖了不同的实战主题和用例&#xff0c;可做毕业…

【vue】用vite创建vue项目

前置要求 要有Node.js 1. 用vite创建vue项目 在cmd中&#xff0c;进入一个文件夹 在文件资源管理器上面的文件目录中&#xff0c;输入cmd&#xff0c;回车在cmd中通过cd命令进入对应文件夹 创建项目 npm create vitelatest # 创建项目创建项目过程中的一些选项 Ok to pro…

Fake-SMS恶意软件混淆分析——低代码的时代来了

写在前面的话 在安全社区中&#xff0c;只要聊到开源代码使用方面的话题&#xff0c;就肯定会聊到安全问题。虽然使用开源代码通常会被认为是安全的&#xff0c;但我们需要清楚的是&#xff0c;与非FOSS&#xff08;自由与开源软件&#xff09;解决方案相比&#xff0c;开源软…

Hive on spark源码编译与调优

文章目录 一、编译环境准备1、hadoop和hive安装2、编译环境搭建3、Hive on Spark配置 二、Hive相关问题1、Hadoop和Hive的兼容性问题1.1 问题描述1.2 解决思路1.3 修改并编译Hive源码 2、Hive插入数据StatsTask失败问题3.1 问题描述3.2 解决思路 3、Hive和Spark兼容性问题3.1 问…

【Android surface 】二:源码分析App的surface创建过程

文章目录 画布surfaceViewRoot的创建&setView分析setViewrequestLayoutViewRoot和WMS的关系 activity的UI绘制draw surfacejni层分析Surface无参构造SurfaceSessionSurfaceSession_init surface的有参构造Surface_copyFromSurface_writeToParcelSurface_readFromParcel 总结…

【Hive上篇: 一篇文章带你使用Hive!深入了解Hive!学会Hive!】

前言&#xff1a; &#x1f49e;&#x1f49e;大家好&#xff0c;我是书生♡&#xff0c;本篇文章主要分享的是大数据开发中hive的相关技术&#xff0c;什么是Hive&#xff1f;怎么使用Hive&#xff1f;怎么安装部署&#xff1f;希望大家看完这篇文章会有所帮助。也希望大家能够…

运筹优化库Qaekwy入门——以指派问题为例

文章目录 1. 什么是 Qaekwy?2. 安装方法(Windows)3. 指派问题3.1 描述问题3.2 建立问题模型3.3 模型求解1. 什么是 Qaekwy? 在 2023 年 9 月 Github 上开源了一个新的优化求解器 Qaekwy,根据官方对 Qaekey 的介绍,该求解器严格来说是一个 Python 客户端,通过 Python 接…