Python进阶-函数、模块和包

2023-11-06

使用如下方法,可以使函数接受不定数目的参数:

def add(x, *args):
    total = x
    for arg in args:
        total += arg
    return total

这样定义的函数不能使用关键词传入参数,要使用关键词,可以这样:

def add(x, **kwargs):
    total = x
    for arg, value in kwargs.items():
        print("adding %s=%s"%(arg,value))
        total += value
    return total
    
print(add(10, y=11, z=12, w=13))

可以接收任意数目的位置参数和键值对参数:

def foo(*args, **kwargs):
    print(args, kwargs)

foo(2, 3, x='bar', z=10)

函数可以返回多个值,将返回的两个值变成了元组。
事实上,不仅仅返回值可以用元组表示,也可以将参数用元组以这种方式传入:

def divid(a, b):
    """
    除法
    :param a: number 被除数
    :param b: number 除数
    :return: 商和余数
    """
    quotient = a // b
    remainder = a % b
    return quotient, remainder

z = (7,4)
print(divid(*z))

这里的*必不可少。
通过字典传入参数来执行函数:

def divid(a, b):
    """
    除法
    :param a: number 被除数
    :param b: number 除数
    :return: 商和余数
    """
    quotient = a // b
    remainder = a % b
    return quotient, remainder

z = {'a':7,'b':4}
print(divid(**z))

这里的**必不可少。
map 方法生成序列
其用法为:

map(aFun, aSeq)
将函数 aFun 应用到序列 aSeq 上的每一个元素上,返回一个列表,不管这个序列原来是什么类型。

事实上,根据函数参数的多少,map 可以接受多组序列,将其对应的元素作为参数传入函数:

def divid(a, b):
    """
    除法
    :param a: number 被除数
    :param b: number 除数
    :return: 商和余数
    """
    quotient = a // b
    remainder = a % b
    return quotient, remainder

a = (10, 6, 7)
b = [2, 5, 3]
print(list(map(divid,a,b)))
#list()很重要

Python 会将所有 .py 结尾的文件认定为 Python 代码文件,考虑下面的脚本 ex1.py :

%%writefile ex1.py

PI = 3.1416

def sum(lst):
    """
    计算 lst 序列所有元素的和
    :param lst: 序列 e.g. [1,2,3]
    :return: lst 序列所有元素的总和
    """
    
    # 获取 lst序列第一个元素
    tot = lst[0]
    
    # 循环遍历 lst 序列剩余元素
    for value in lst[1:]:
        tot = tot + value
    return tot

w = [0, 1, 2, 3]
print(sum(w), PI)

可以执行它:

%run ex1.py

这个脚本可以当作一个模块,可以使用import关键词加载并执行它(这里要求ex1.py在当前工作目录):

import ex1

ex1

需要重新导入模块时,可以使用 reload 强制重新载入它,例如:

from imp import reload
reload(ex1)

删除之前生成的文件:

import os
os.remove('ex1.py')

name 属性
有时候我们想将一个 .py 文件既当作脚本,又能当作模块用,这个时候可以使用 name 这个属性。

只有当文件被当作脚本执行的时候, __name__的值才会是 ‘main’,所以我们可以:

%%writefile ex2.py

PI = 3.1416

def sum(lst):
    """ Sum the values in a list
    """
    tot = 0
    for value in lst:
        tot = tot + value
    return tot

def add(x, y):
    " Add two values."
    a = x + y
    return a

def test():
    w = [0,1,2,3]
    assert(sum(w) == 6)
    print('test passed.')

if __name__ == '__main__':
    test()

当作模块导入, test() 不会执行。

假设我们有这样的一个文件夹:

foo/

init.py
bar.py (defines func)
baz.py (defines zap)
这意味着 foo 是一个包

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python进阶-函数、模块和包 的相关文章

随机推荐

  • 博客迁移通告

    各位博友 鉴于一些个人原因 本人博客迁移至博客园 https www cnblogs com horacle 欢迎访问和关注
  • 七、Redis 主从复制以及哨兵模式的详细图解

    概念 主从复制 是指将一台Redis服务器的数据 复制到其他的Redis服务器 前者称为主节点 master leader 后者称为从节点 slave follower 数据的复制是单向的 只能由主节点到从节点 Master以写为主 Sla
  • 计算机网络---应用层

    文章目录 域名系统DNS 互联网的域名结构 域名服务器 文件传送协议FTP FTP的基本工作原理 简单文件传送协议TFTP 远程终端协议TELNET 万维网 统一资源定位符URL 超文本传送协议HTTP 万维网的文档 电子邮件294 动态主
  • e7用什么主板_【有趣】第3期:八路E7的结局如何?盘点历代至尊版处理器现价...

    0 前言 什么八路E7 四路泰坦 你想在显卡吧出人头地受人膜拜 进阶的门槛似乎有些高 不过不论是当年人们口中顶级的至强E7 8870 还是GTX Titan 都经受不住时间的考验 现在组8路E7要不是主板不好买 要不然 这8个CPU加起来
  • no model named “compat“ ,Tensorflow 版本问题

    查看我的版本 Module tf compat TensorFlow Core v2 6 0Compatibility functions https tensorflow google cn versions r2 6 api docs
  • ChatGPT写文章教程_如何使用ChatGPT写文章

    如何用ChatGPT写出高质量文章 ChatGPT是一种基于人工智能技术的自然语言处理工具 它可以生成高质量的文章 但是如何利用它来写出优秀的文章呢 本文将为你介绍如何使用ChatGPT来写出高质量的文章 一 什么是ChatGPT Chat
  • MySQL数据库——DML基本操作

    文章目录 前言 插入数据 全列插入 指定列插入 修改数据 删除数据 前言 前面我们学习了MySQL DDL操作 对数据库和表的结构的操作 那么今天我将为大家分享MySQL DML操作 对表数据的操作 MySQL DML操作有以下几种 插入操
  • linux下的定时任务

    linux环境下 我们有两种常用的方式实现定时的任务 等待一段时间后执行某任务 一次性 该类型的需求直接通过sleep方法即可完成 1小时候执行ls任务 并将输出重定向至ls log sleep 1h ls gt gt ls log 每日定
  • 对话Sam Altman与Greg Brockman:初心和过去,信念和现在,责任和未来

    导读 近日 硅谷著名投资人Reid Hoffman和Aria Finger联手对Sam Altman和Greg Brockman进行了一场访谈 访谈涉及到主题有 OpenAI的使命 人工智能对教育 医疗等行业的变革性影响 人工智能如何面对监
  • 涂鸦TuyaOS SDK 网关例程-wifi配网

    涂鸦TuyaOS SDK 网关例程 wifi配网 使能WIFI配网预编译宏定义 net tools相关文件路径 配网步骤 如果一直都没配网成功 看下面 总结 使能WIFI配网预编译宏定义 例程默认没开WiFi的demo使能 代码预编译开启使
  • 大学计算机python怎样一个星期速成?

    一 Python基础知识 黑马程序员Python入门教程 适合零基础自学的Python教程 1 学习内容 计算机组成原理 计算机组成部分 操作系统分类 B S和C S架构 理解什么是软件和硬件 Python编程规范 字符串 字典 列表 元组
  • linux网络配通

    Linux网络配置 vim etc sysconfig network scripts ifcfg ens33 ONBOOT yes DNS 8 8 8 8 IPADDR 192 168 118 90 NETMASK 255 255 255
  • 最新版本EMGU使用说明 V4.2

    最新版本EMGU使用说明 V4 2 项目打开nuget搜索 Emgu CV Emgu CV runtime windows 下载安装 说明 netstandard 2 0环境版本 Emgu CV runtime windows 为windo
  • layui的框架导入

    目录 1 导入步骤 2 框架包含的组件 1 导入步骤 1 1 下载框架包 http www layui com 1 2 将layui文件夹拷入项目位置 1 3 页面中导入 layui all js layui css 和 jquery 即可
  • docker启动Nacos docker run requires at least 1 argument.

    nacos启动命令 docker run d e PREFER HOST MODE ip e MODE standalone e SPRING DATASOURCE PLATFORM mysql e MYSQL SERVICE HOST 4
  • glide的基本使用及进阶使用

    glide生命周期管理 内存管理 缓存机制 加载器 观察者模式 前言 本系列博文主要通过借鉴其他优秀博文以及自己的实际开发经验综合得出 主要分析glide相关使用 机制以及设计模式等内容 相信这篇博文会让你对glide有更加深入的理解 本篇
  • 如何手动优化xp系统

    1 删除系统备份的文件 直接在 开始 菜单的 运行 对话框中 输入sfc exe purgecache就可以了 2 删除系统中的帮助文件 如果你没有看帮助的习惯 况且在有时候误操作的时候 常把帮助对话框调出来 就删除了吧 免得浪费空间 找到
  • python项目快速生产依赖库列表

    安装pipreqs库 pip install pipreqs 在项目工程根目标执行以下命令 生成requirements txt pipreqs encoding utf8
  • Debian 8.2 安装docker

    一 安装docker io包之前 需要先设置使用backports源 编辑 etc apt sources list文件 加入下面这一句 deb http http debian net debian jessie backports ma
  • Python进阶-函数、模块和包

    使用如下方法 可以使函数接受不定数目的参数 def add x args total x for arg in args total arg return total 这样定义的函数不能使用关键词传入参数 要使用关键词 可以这样 def a