python函数参数定义中的这两个分隔符,还有人不知道吗?

SAP-ABAP:SAP HANA性能神器FDA:是极速查询的引擎,也是CPU过载的元凶 在SAP S/4HANA的世界里,有一个被ABAP开发者们既爱又怕的特性——Fast Data Access(FDA),它能将性能提升百倍,也能让CPU瞬间飙升。本文将带您全面解剖这一核心机制。 阅读详情

大家好,我是海鸽。今天我们来聊下python(3.8+)函数定义中的两个特殊参数/和*。

前言

python 函数的参数定义想必大家应该是非常熟悉的,有两种:

  • 位置参数(positional argument):根据函数在参数列表中的位置传递给函数的参数。
  • 关键词参数(keyword argument):通过指定参数名称及其对应值传参的参数。
def foo(a, b=1, c=2):
    print(a, b, c)

这里的a是位置参数,b 、c是关键词参数。

但是,调用时,我们可以通过多种方式传参,貌似没有明确的位置(positional)或关键字(keyword)界限:

foo(1, 2, 3)

foo(1, b=2, c=3)
foo(a=1, b=2, c=3)
foo(a=1, c=3, b=2)
foo(c=3, a=1, b=2)

请注意:所有位置参数都必须首先出现,然后是关键字参数

在Python函数中,参数默认可以按位置(positional)或按关键字(keyword)传入,这意味着调用者可以基于参数的位置或名称来传递值。

然而,在某些情况下,我们可能需要对参数的传入方式进行限制,以确保函数调用的明确性和正确性。

  • 具体来说,我们可以将某些参数指定为仅位置参数(positional only),这意味着它们只能通过位置来传入,而不是keyword传参;

  • 同时,也可以将其他参数指定为仅关键字参数(keyword only),这要求它们必须通过关键字来指定。


首先,要怎么确定位置参数或关键字参数呢?

以下是确定这一点的简单经验法则:

  • 核心参数通常是位置参数。核心参数是什么?通常指函数运行所必需的参数。
  • 选项、标志和配置通常是关键字。这些参数通常不是函数的核心参数,而是修改函数的行为方式。

这看起来有点抽象,所以让我们看一个具体的例子。以下是标准库中shutil模块中copyfile函数的函数签名。

def copyfile(src, dst, *, follow_symlinks=True)

顾名思义,此功能将文件从一个地方复制到另一个地方。因此,src和dst参数是函数的核心。

此外,还有一个标志follow_symlinks。

此标志不是函数操作的核心部分,但它改变了函数的行为方式。因此,此参数应为关键字参数。

这样的区分有助于避免参数的混淆,并提供了更精确的函数调用传参方式。


我们发现,copyfile函数签名中有个*参数,这又是什么呢?这将强制follow_symlinks只能关键字传参(keyword only)。

特殊参数

python3.8 之后,python 引入了一个新的函数定义语法,你可以使用Special parameters(/和*)将你函数的位置参数和关键字参数分开,即可以强制执行位置参数或强制关键字参数。

一图胜千言。

简而言之就是:

  • 位于斜杠/之前的参数被指定为仅位置参数(positional only),这意味着它们必须按照在函数定义中出现的顺序传入,不能使用关键字参数的形式。
  • 位于星号*之后的位置则被保留给仅关键字参数(keyword only),调用者必须使用关键字来指定这些参数。
  • 至于/和*之间的参数,它们遵循默认的行为,既可以通过位置传入,也可以通过关键字传入。
  • 当然,在函数的定义中,这二者你也可以只用一个,或者都不用,或者两个都用。

用法示例

Python 中的强制位置函数参数/的用法

所有/之前的参数都是positional-only参数,这意味着它们只能作为位置参数传递给函数,而不能作为关键字参数传递。

一般,核心参数,或在参数顺序比参数名称更重要的情况下,或者参数的名字本身没什么语义(开发者希望在未来可以随时修改这个参数的名字),例如在处理图像或执行几何计算时,此功能非常有用。通过使用仅位置参数,仅需确保以正确的顺序传参调用函数,从而提高代码的清晰度和可维护性。

def positional_only(a, b, /):
    print(a + b)


positional_only(1, 2)

对于上面这个函数而言,调用positional_only函数时,参数a、b只能是位置参数,即:positional_only(1, 2)执行正确。

而positional_only(1, b=2)和positional_only(a=1, b=2)将执行错误。

# 执行将报错:TypeError: positional_only() got some positional-only arguments passed as keyword arguments: 'b'
# positional_only(1, b=2)

# 执行将报错:TypeError: positional_only() got some positional-only arguments passed as keyword arguments: 'a, b'
# positional_only(a=1, b=2) 

Python 中的强制关键字函数参数*的用法

所有*之后的参数都是keyword-only参数,它们只能作为关键字参数传递给函数,不能作为位置参数传递。

当您想要强制对某些参数(例如具有默认值的可选参数)使用关键字参数时,或者当您想要明确区分必需参数和可选参数时,又或者这些参数在未来的位置也随时可能发生变化(在前面加入新的参数之类),此功能非常有用。

def keyword_only(a, b, *, c):
    print(a + b + c)


keyword_only(1, 2, c=7)
keyword_only(1, b=2, c=7)
keyword_only(a=1, b=2, c=7)

对于上面这个函数而言,调用keyword_only函数时,强制参数c只能是关键字(keyword-only)参数传参;a、b不做限制,属于positional or keyword传参。

/和*都出现在函数参数中

def f(a, /, b, *, c):
    print(a + b + c)


f(1, 2, c=7)  # 10
f(1, b=2, c=7)  # 10
# f(a=1, b=2, c=7)  # wrong, TypeError: f() got some positional-only arguments passed as keyword arguments: 'a'

从上面可知,强制a是positional_only参数,b(不做限制)是positional or keyword参数,强制c属于keyword-only参数。

内置函数中的强制位置参数和强制关键字参数

此外,这种语法也在 Python 内置函数的定义和文档说明中得到了应用,体现了其在官方实践中的规范性和重要性。如我们熟知的exec内置函数的函数签名:

# help(exec)可查看函数签名
exec(object, globals=None, locals=None, /, *, closure=None)

对于此函数,参数object和globals、locals必须作为位置传递,仅因为它们出现在/的左侧。另一方面,closure是一个仅关键字参数,因为它出现在*的右侧。

def keyword_only(*, a, b, c):
    print(a + b + c)


exec("keyword_only(a=1, b=2, c=7)")

关于函数签名, exec需要注意的一件有趣的事情是globals和locals具有默认值。因此,传递这些选项不是强制性的。但是,如果您确实为这些参数传入了值,那么它必须是位置的。显然,python 核心开发人员认为这两个参数是exec函数的核心部分。

再比如sorted函数:

sorted(iterable, /, *, key=None, reverse=False)

iterable必须以positional-only的形式传入,而两个可选参数key和reverse,若传必须以keyword-only的形式传入。

data = {'apple': 2, 'orange': 4, 'banana': 1}
# 按字典的值排序
sorted_data_by_value = sorted(data.items(), key=lambda item: item[1], reverse=True)
print(sorted_data_by_value)  # 输出: [('orange', 4), ('apple', 2), ('banana', 1)]

小结

要指定函数调用者仅能使用位置参数,您可以将这些参数放置在斜杠/之前。这样,调用者在传递这些参数时必须按照它们在函数定义中出现的顺序,而不能使用关键字参数。

相反,如果您希望确保调用者在使用函数时必须显式地指定某些参数,您可以将这些参数放置在星号*之后。这要求调用者在调用函数时使用关键字参数来传递这些值,从而避免了依赖于参数的位置,提高了代码的可读性和明确性。

在设计函数时,如果您面临需要明确区分参数传入方式的语义需求,不妨考虑采用这两个分隔符/和 *。这种明确的参数定义不仅有助于减少因参数误用而导致的错误,还能增强程序的健壮性和可靠性,从而提升整体的代码质量和维护性。

免费资料获取:

+V(fenggeniubi_2023)获取Python编程、人工智能、爬虫等10+本精品电子书。

关注我👇,精彩不再错过

如果你觉得文章还不错,请大家点赞、关注、分享、在看下,因为这将是我持续输出更多优质文章的最强动力!

欢迎随时与我联系,我期待与大家交流心得,共同学习,共同进步。

深度学习框架对比:AI开发如何选择 你是否遇到过这样的困惑:想做一个图像分类模型,朋友推荐PyTorch;公司要部署智能客服,同事说用TensorFlow;想快速验证想法,学长又提到Keras……深度学习框架种类繁多,功能重叠却各有侧重。本文将覆盖主流框架(PyTorch/TensorFlow/Keras/JAX/MXNet等),从开发者真实需求出发,总结选择框架的核心维度。本文将按照“认识框架→对比特性→实战选择”的逻辑展开:先通过生活比喻理解各框架特点,再用代码对比核心功能,最后结合真实场景给出选择建议。动态计算图。 阅读详情

相关推荐

分享一个N-MOS管和P-MOS管驱动应用实例

大家好,我是『芯知识学堂』的SingleYork,今天给大家分享一下MOS管驱动相关的知识。 MOS管在电路设计中是比较常见的,按照驱动方式来分的话,有两种,即:N-MOS管和P-MOS管。MOS管跟三极管的驱动方式有点类似,但又不完全相同,那么今天笔者将会给大家简单介绍一下N-MOS管和P-MOS管的工作原理,并结合自己实际的应用来给大家分享一下如何来驱动N-MOS管和P-MOS管。 首先,我们先来看一下N-MOS管和P-MOS管分别在电路中的电气符号: 咋一看上面两个电气符号,似乎非常的相似,可能让很

『芯知识学堂』SingleYork 的博客 3万+

python函数原型中的形式参数中的符号/和*的含义

在命令行中查看python的函数原型时,发现函数的形式参数中会有/和* def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2): ​ /和*是可选的。这些符号表明形参如何把参数值传递给函数:位置、位置或关键字、关键字。 函数定义中未使用/和*时,参数可以按位置或关键字传递给函数。 1. / /用于在逻辑上分割仅限位置形参与其它形参。如果函数定义中没有/,则表示没有仅限位置形参。 特定形参被标记为仅限位置时,形参的顺序很重要,且这些形...

UncleCrayon的博客 1094

目标检测 | R-CNN、Fast R-CNN与Faster R-CNN理论讲解

目标检测:R-CNN、Fast R-CNN与Faster R-CNN理论讲解,根据B站up霹雳吧啦Wz总结。此文章包含R-CNN算法原理讲解、Fast R-CNN算法原理讲解、Faster R-CNN原理讲解、目标检测评价指标介绍与特征金字塔网络FPN讲解。

houjingchuan的博客 9566

python3.8的参数 ‘/‘

官方解释 有一个新的函数参数语法"/"指示某些函数参数必须按位置指定,不能用作关键字参数。这与用Larry Hastings的Argument Clinic工具注释的C函数的help()所示的符号相同。 实验了几次 def f(a, b, /, c, d, *, e, f): print(a, b, c, d, e, f) f(10, b=20, c=30, d=40, e=50, f=60) 报错: f() got some positional-only arguments passed as

m0_53313913的博客 235

QT快速配置MSVC2017编译环境(3分钟极简指南)

本文提供了一份3分钟极简指南,帮助开发者快速配置QT的MSVC2017编译环境。通过断网安装、精准勾选组件和配置QT Creator编译器路径等步骤,大幅提升QT开发效率。MSVC2017作为Windows平台高性能C++编译器,特别适合处理大型QT项目,编译速度优势明显。

weixin_30399821的博客 501

多旋翼飞行器设计与控制·Pixhawk4以及外部设备接线(笔记004)

笔记主要来源:Pixhawk 4 接线快速入门 目录 一、Pixhawk 4 的各个接口 二、接线图概览(重要传感器及外围设备) 三、飞控、GPS的安装和方向 四、电源 五、无线电遥控 六、数传电台(可选) 七、SD Card(可选) 八、电机以及其他外设 一、Pixhawk 4 的各个接口 FMU:Flight Management Unit 飞行管理组件 主 FMU 处理器:STM32F765 32 位 Arm® Cortex®-M7,216MHz,2MB...

猪猪的博客 1万+

Python - 3.8 新特性之仅位置参数 & 仅关键字参数

前置知识 Python 函数:https://www.cnblogs.com/poloyy/p/15092393.html 什么是仅限位置形参 仅限位置形参是 Python 3.8 才有的新特性 新增了一个函数形参语法 / 添加了它,表示函数形参只能通过位置参数传递,而不能通过关键字参数形式传递 仅限位置形参栗子 def test1(a, b, c): print(a, b, c)...

qq_33801641的博客 822

VSCode配置C/C++开发环境:从零安装MinGW-w64并运行第一个C程序

在Windows系统上搭建C语言开发环境时,很多初学者混淆编辑器、编译器与调试器的分工,导致配置过程屡屡受挫。理解VSCode作为轻量级编辑器的定位,以及MinGW-w64提供的gcc编译器在源码编译中的核心作用,是顺利完成环境配置的关键。环境变量的正确设置直接影响gcc命令能否全局调用,而C/C++插件则赋予编辑器语法高亮与智能提示能力。通过安装VSCode、配置MinGW-w64、安装插件、汉化界面并运行一个最简单的hello.c程序,就能系统掌握这套开源工具链的完整工作流。无论是用于课程学习、算法练习

weixin_42531923的博客 528

超详细!少数人才知道的 Python 函数定义详解

Python 函数定义时支持可变数量的参数。

python03011的博客 321

Ubuntu 26.04 本地安装 GitLab CE 完整教程(非 Docker 方式)

本文详细介绍了在Ubuntu 26.04系统上通过Omnibus包安装GitLab CE的完整流程。主要内容包括:环境准备(系统要求、依赖安装)、配置清华镜像源、执行安装命令、修改配置文件、服务管理命令以及常见问题解决方法。文章特别强调了内存要求(建议4GB以上)、首次登录密码获取、HTTPS安全配置等关键点,并提供了性能优化建议和安全设置指导。相比Docker方式,Omnibus安装具有性能更好、管理方便等优势,适合需要私有化部署GitLab的场景。

1368

华为od统一考试B卷【单词搜索】C++ 实现

找到它是一个小游戏,你需要在一个矩阵中找到给定的单词。假设给定单词 HELLOWORD,在矩阵中只要能找到 H->E->L->L->O->W->O->R->L->D连成的单词,就算通过。意区分英文字母大小写,并且您只能上下左右行走,不能走回头路。

MISAYAONE的博客 706

如何使用 “仅限关键字参数”(keyword-only arguments)和 “仅限位置参数”(positional-only arguments)来提升函数调用的清晰度

位置参数(Positional Arguments)可读性差,容易混淆。 关键字参数(Keyword Arguments)提升可读性,但默认是可选的。 仅限关键字参数(Keyword-Only Arguments,*)强制 用户用关键字参数,避免混淆。 仅限位置参数(Positional-Only Arguments,/)适用于参数名意义不大的情况,防止 API 变更影响用户代码。 最佳实践:结合 / 和 *,让 API 更加清晰易用! 🚀

陈开心的博客 607

探索数据库领域 SQL 的 JSON 数据处理技巧

在当今数字化时代,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,被广泛应用于各种领域,如 Web 应用、移动应用、大数据处理等。数据库作为数据存储和管理的核心,需要具备处理 JSON 数据的能力。本文章的目的在于深入探索 SQL 语言在数据库中处理 JSON 数据的技巧,涵盖从基础的 JSON 数据查询到复杂的 JSON 数据操作,帮助读者全面了解和掌握 SQL 处理 JSON 数据的方法。

2502_91592937的博客 924

Python函数参数定义中的这两个分隔符,还有人不知道吗?

python 函数的参数定义想必大家应该是非常熟悉的,有两种: 位置参数(positional argument):根据函数在参数列表中的位置传递给函数的参数。 关键词参数(keyword argument):通过指定参数名称及其对应值传参的参数。

公众号:该用户快成仙了 602

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

各种python 函数参数定义和解析

python 中的函数参数是赋值式的传递的,函数的使用中要注意两个方面:1.函数参数的定义过程,2.函数参数在调用过程中是如何解析的。首先说一下在python 中的函数调用过程是分四种方式的,这里且先说五种,第五种已经在以前的文章中说过了。 1.参数枚举的函数定义: >>> def Fun(a,b,c): return (a,b,c) >>> Fun(1,2,3) (1, 2, 3)

byteway的专栏 3万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Python函数参数中的*

xx用元组收集位置参数,**xx以字典打包关键字参数。(笔记模板由python脚本于2024年10月23日 06:52:11创建,本篇笔记适合Python基础的coder翻阅)【学习的细节是欢悦的历程】Python官网Free:大咖免费“圣经”教程python 完全自学教程,不仅仅是基础那么简单……自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。——华罗庚HOT好文力荐Python函数参数中的*

m0_57158496的博客 1368

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

python 函数参数_不知道python函数参数的类型怎么办?

学过python的同学都知道,python中没有类型声明的语句,所以经常搞不清要给函数传什么类型的参数,比如下面经典的歧义函数:def add(x, y): return x+y在没有任何说明的情况下,很难搞清楚x和y分别表示什么,可以是两个数值或字符串:print(add(2, 4)) print(add("w", "t"))没有具体的参数类型这种写法能起到类似多态的作用,使得函数不必指...

weixin_39683163的博客 640

【学习心得】Python函数参数中的两个特殊分隔符

简单记忆两个分隔符,斜杠之前位置参数,星号之后关键字参数。

qq_39780701的博客 109

python分隔符怎么用

在Python程序中,分隔符是一个非常重要的概念,它可以帮助我们在代码中区分不同的元素,从而提高代码的可读性和可维护性。本文将从多个角度分析Python分隔符的使用方法。我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

weixin_67991858的博客 2401

Python中常用的7种分隔符!

在Python中,分隔符是用于分隔不同元素或字符串的字符,是一个非常重要的概念。那么Python中常用的分隔符有哪些?常用的分隔符有逗号、冒号、分号、竖线、大括号、小括号等,接下来是具体的内容介绍。Python中常用的分隔符有:逗号、冒号、分号、竖线、大括号、小括号、方括号等。这些分隔符在Python程序中扮演着不同的角色。①定义函数、类、条件语句、循环语句等后面的代码块。③在列表、元组和字典等数据结构中分隔不同的元素。②在函数的参数列表中分隔不同的参数。①定义多个变量或赋值。②在字典中分隔键和值。

oldboyedu1的博客 2573

[oeasy]python037_ print函数参数_sep分隔符_separator

将 分隔符 separator修改为冒号而且 发现了 规律abc对应数字都是挨着的为啥从97开始?各个字符 是如何分布的呢?所有字符都有序号就连 空格 也不例外空格序号32是 print函数中 sep参数的 默认值字符在计算机中用数字序号来 存储表示字符序号 有规律a对应 97b对应 98c对应 99连续字母 对应连续序号似乎应该是 天经地义 的但 为什么小写a 从97开始?除了 小写字母外还有 很多字符 的都分布 在。

1108

全面总结 Python 中的函数参数类型

Python 中的函数可以定义为调用函数时将执行的语句列表。我们可以通过使用关键字 def 并为其分配一个名称来定义一个函数。在本文中,我们将通过示例一一介绍以下领域。写一个函数不带参数的函数一个参数的函数返回值的函数多个参数,多个返回值因此,我们了解到 Python 函数可以接受三种不同类型的参数。这些是任意*args、关键字**kwargs和默认参数。虽然关键字参数允许我们使用任何顺序,但默认参数帮助我们处理缺少值的情况。

迹忆客 2446

Python中常用的分隔符有哪些?

在Python中,分隔符是用于分隔不同元素或字符串的字符,是一个非常重要的概念。那么Python中常用的分隔符有哪些?常用的分隔符有逗号、冒号、分号、竖线、大括号、小括号等,接下来是具体的内容介绍。Python中常用的分隔符有:逗号、冒号、分号、竖线、大括号、小括号、方括号等。这些分隔符在Python程序中扮演着不同的角色。①定义函数、类、条件语句、循环语句等后面的代码块。③在列表、元组和字典等数据结构中分隔不同的元素。②在函数的参数列表中分隔不同的参数。①定义多个变量或赋值。②在字典中分隔键和值。

oldboyedu1的博客 556

Python中的函数参数

Python中的函数8.1 内置函数8.2 函数的定义8.2.1 关键字pass的使用8.2.2 函数的参数8.3 参数类型8.3.1 位置的参数8.3.2. 默认值参数8.3.3. 命名关键字参数8.3.4 可变参数8.3.5 关键字参数8.3.6 参数组合 函数可以解决大量代码重复、功能不清晰等问题,分为内置函数和自定义函数。 函数的作用: 通过函数,可以对功能进行详细的划分,在需要使用功...

Hundreays 919

python函数参数定义不合法_面试题 - Operater - 博客园

1、执行这行代码结果是多少[i**i for i in range(3)]我写的答案是[0,1,3],忘记了0**0是1[1,1,3]2、关于python内存管理:变量可以无需指定类型,可以使用del释放资源,变量不必事先声明但是变量无需创建和赋值而直接使用是会报错的,is not defined3、关于字符串:字符串应该视为长度为1的字符串,既可以用单引号,也可以用双引号创建字符串,在三引号字符...

weixin_39649965的博客 5223

python形参定义类型_Python函数参数的五种类型

之前项目需求,需要通过反射获取函数的参数,python中可以通过函数签名(signature)来实现。首先需要了解函数参数的类型,Python的参数类型一共有5种:POSITIONAL_OR_KEYWORD、VAR_POSITIONAL、VAR_KEYWORD、KEYWORD_ONLY、POSITIONAL_ONLY其中 POSITIONAL_OR_KEYWORD、VAR_POSITIONAL、V...

weixin_39633500的博客 3710
上一篇: js逆向案例 | 加速乐反爬逆向
下一篇: Pydantic:目前最流行的Python数据验证库
海哥python
博客等级 码龄9年 1487粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海哥python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值