Python从入门到网络爬虫(函数详解)

news2024/11/27 22:20:00

前言

函数是变成语言中最常见的语法,函数的本质就是功能的封装。使用函数可以大大提高编程效率与程序的可读性。函数是能够实现特定功能的计算机代码而已,他是一种特定的代码组结构。

函数的作用

  • 1.提升代码的重复利用率,避免重复开发相同代码
  • 2.提高程序开发效率
  • 3.便于程序维护

1. 函数的定义

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

基本

def 函数名称( ):

        # 函数体

带有参数

def 函数名称(参数[,参数2,参数3]):

        # 代码块

带有返回值

def 函数名称():

        # 代码块

        return values

def funName(args):
    print(args)
    return args

函数名的命名规则:和变量基本一样

  • 1.推荐使用英文或者拼音,禁止使用中文
  • 2.可以使用数字,但是不能用数字开头
  • 3.不可以使用特殊字符,除了_
  • 4.函数名严格区分大小写
  • 5.函数名必须要有意义。
  • 6.不能和系统已经存在的保留关键字冲突!
  • 7.禁止使用和系统提供函数相同的函数名

2. 函数的调用

注意函数定义之后不会自动执行,必须在调用函数后函数才会执行,并且函数必须定义在前,只有前边定义了函数后面才能调用

# 函数定义
def funName(args):
    print(args)
    return args
# 函数调用:注意函数必须定义在前,只有前边定义了函数后面才能调用
funName("xujingliang")

3. 函数参数

3.1 必备参数

必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。

def getAll(a,b,c,d):
    return a+b+c+d
print(getAll(1,2,3,4))
 3.2 关键字参数

关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

def getUserInfo(name,age):
    print(name,age)
getUserInfo("xujingliang",20)
getUserInfo(age=20,name="sunyanan")
3.3 默认参数

调用函数时,默认参数的值如果没有传入,则被认为是默认值。下例会打印默认的age,如果age没有被传入: 

def getPassword(username,password="12345"):
    print(username,password)
getPassword("xujingliang")
getPassword("sunyanan","54321")
 3.4 不定长参数

不定长参数:你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名。基本语法如下:

def printUsers(user,*users):
    print(user)
    print(users)
printUsers("xujingliang")
printUsers("xujingliang","xunyanan","wuyou","wutong")


def getAllSum(arg,*args):
    res = arg
    if len(args)>0:
        for i in args:
            res += i
    return res
print("return语句返回结果",getAllSum(10,20,30,40))

4. 匿名函数

使用 lambda 来创建匿名函数。

  • python 使用 lambda 来创建匿名函数。
  • 所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。
  • lambda 只是一个表达式,函数体比 def 简单很多。
  • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
  • lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
  • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

语法: lambda [arg1 [,arg2,.....argn]]:expression

userinfo = lambda username,password:print(username+":"+password)
userinfo("xujingliang","123456789")

5. return语句

return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。之前的例子都没有示范如何返回数值,下例便告诉你怎么做:

def getResult(arg,*args):
    res = arg
    if len(args)>0:
        for i in args:
            res += i
    return res
print("return语句返回结果",getResult(10,20,30,40))

上述代码示例中,计算所有传入参数的值,并返回所有值的总和结果。 

6. 变量作用域

 一个程序的所有的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的。变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称。两种最基本的变量作用域如下:

  • 全局变量
  • 局部变量

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。如下实例:

total = 10
def getSum(a,b):
    total = a+b
    print("这里的total为局部变量",total)
    return total
getSum(10,10)
print("这里的total为全局变量与函数内的total互不影响",total)

可以通过global关键字来在函数内部创建全局变量

def createGlobalVar(globalArgs):
    global globalArg
    globalArg = globalArgs

createGlobalVar(200)
print(globalArg)

如果全局变量和局部变量重名,可以使用全局函数globals()在函数内部访问重名的全局变量 

def accessGlobalVar():
    total = 10086
    print(total)
    print(globals()['total'])
accessGlobalVar()

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

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

相关文章

ssm基于vue框架和elementui组件的手机官网论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本手机官网就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息&#x…

【UEFI基础】EDK网络框架(UNDI)

UNDI UNDI代码综述 UNDI全称Universal Network Driver Interface,它虽然属于UEFI网络框架的一部分,但是并没有在EDK开源代码中实现。不过目前主流网卡厂商都会提供UEFI下的网络驱动,并且大部分都实现了UNDI,这样BIOS下就可以通过…

鸿蒙APP上线注意事项

在将鸿蒙APP上线之前,开发者需要注意一些关键的事项,以确保应用的顺利发布和良好运营。以下是一些建议的注意事项,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.遵循应用市…

【常用排序算法】冒泡排序

冒泡排序 冒泡排序基本思想:N 个数的数组,经过N-1轮排序。 升序 大的值下沉,小的值上浮。降序 小的值下沉,小的字上浮 import java.util.Arrays; public class BubbleSort {public static void main(String[] args) {int[] values…

电脑视频需要分屏怎么做

在当今数字时代,人们对于视频的需求越来越高。有时候,我们可能想在同一屏幕上同时播放多个视频,进行对比、观看、剪辑或者其他目的。那么,视频分屏应该怎么做呢? 在本篇文章中,我们将会详细的为你介绍视频分…

Geotrust DV通配符证书保护域名数量

Geotrust是一家知名的SSL证书提供商,旗下有多种类型的SSL数字证书,保护网站数据在传输过程中的安全性和完整性,帮助用户确认其网站的安全。通配符SSL证书是Geotrust颁发的一种可以同时保护多个域名站点的SSL证书。今天就随SSL盾小编了解Geotr…

conda虚拟环境搭建和打包,删除,移动等全流程及相关问题汇总

私人笔记无偿分享,更多内容请访问:链接:https://pan.baidu.com/s/19mS5N9XJ_AotF20kUwSA3w?pwdp5kx 提取码:p5kx 复制这段内容后打开百度网盘手机App,操作更方便哦 4.4. anaconda虚拟环境搭建: 网址&am…

解决在test以外的目录下导入junit无效

以上引用来自src目录下的文件,可以看到,和junit有关的导入都飘红,但明明junit已经被正确导入进了项目中。 再看右侧的Maven的依赖下方,junit的右边有一个很不起眼的(test) 这是因为junit作为测试框架,可能包含仅适用于…

Halcon区域的面积和中心点area_center

Halcon区域的面积和中心点 提到区域的特征,最常用的莫过于区域的面积和中心点坐标信息。实际工作中,经常会使用面积或中心点进行特征的选择和定位。Halcon中的area_center算子就是用于实现这一功能的,该算子一次返回以下两个结果。 &#xf…

【KingbaseES】实现MySql函数WEEKS_BETWEEN

WEEKS_BETWEEN CREATE OR REPLACE FUNCTION weeks_between(start_date date, end_date date) RETURNS integer AS $$ BEGIN RETURN EXTRACT(WEEK FROM end_date) - EXTRACT(WEEK FROM start_date); END; $$ LANGUAGE plpgsql IMMUTABLE;结果展示

嵌入式Linux之MX6ULL裸机开发学习笔记(IMX启动方式-启动设备的选择)

一,硬件启动方式选择 1.启动方式的选择 6ull支持多种启动方式。 比如可以从 SD/EMMC、 NAND Flash、 QSPI Flash等启动。 6ull是怎么支持多种外置flash启动程序的。 1.启动方式选择: BOOT_MODE0 and BOOT_MODE1,这两个是两个IO来控制的,…

Unity 使用Sprite绘制一条自定义图片的线

Unity 使用Sprite绘制一条自定义图片的线 前言项目场景布置代码编写总结 运行效果感谢 前言 遇到一个需要绘制自定义形状的需求。那只能利用Sprite来绘制一条具有自定义图片的线,通过代码动态设置起点、终点以及线宽,实现灵活的线条效果。 项目 场景…

嵌入式Linux之MX6ULL裸机开发学习笔记(汇编LED灯点亮)

汇编LED驱动实验 1.驱动编写 首先创建在vscode上创建工作区,创建led.s汇编文件,然后编写以下程序 .global _start 全局标号 _start: /* 使能所有外设时钟 */ ldr r0,0x020c4068 CCGR0 ldr r1,0xffffffff 要向CCGR0写入的数据 str r1,[r0] 将0xff…

UE5 C++(十一)— 碰撞检测

文章目录 代理绑定BeginOverlap和EndOverlapHit事件的代理绑定碰撞设置 代理绑定BeginOverlap和EndOverlap 首先,创建自定义ActorC类 MyCustomActor 添加碰撞组件 #include "Components/BoxComponent.h"public:UPROPERTY(VisibleAnywhere, BlueprintRea…

IO进程线程 day4

进程状态间的转化 创建出三个进程完成两个文件之间拷贝工作&#xff0c;子进程1拷贝前一半内容&#xff0c;子进程2拷贝后一半内容&#xff0c;父进程回收子进程的资源 #include <head.h> int main(int argc, const char *argv[]) {FILE *fp1NULL,*fp2NULL;//定义两个文…

Java Arrays.copyOfRange的用法

Arrays.copyOfRange的使用方法&#xff1a; 将一个数组拷贝至另一个数组中 参数&#xff1a; original&#xff1a;第一个参数为要拷贝的数组对象 from&#xff1a;第二个参数为拷贝的开始位置&#xff08;包含&#xff09; to&#xff1a;第三个参数为拷贝的结束位置&#x…

小程序组件内的数据监听器

数据监听器可以用于监听和响应任何属性和数据字段的变化。从小程序基础库版本 2.6.1 开始支持。 有时&#xff0c;在一些数据字段被 setData 设置时&#xff0c;需要执行一些操作。例如&#xff0c; 一个值取决于另外两个值的变化&#xff0c;this.data.sum 永远是 this.data.…

大创项目推荐 深度学习卷积神经网络垃圾分类系统 - 深度学习 神经网络 图像识别 垃圾分类 算法 小程序

文章目录 0 简介1 背景意义2 数据集3 数据探索4 数据增广(数据集补充)5 垃圾图像分类5.1 迁移学习5.1.1 什么是迁移学习&#xff1f;5.1.2 为什么要迁移学习&#xff1f; 5.2 模型选择5.3 训练环境5.3.1 硬件配置5.3.2 软件配置 5.4 训练过程5.5 模型分类效果(PC端) 6 构建垃圾…

微软 Power Platform 使用Power Automate发送邮件以Dataverse作为数据源的附件File Column

微软Power Platform使用Power Automate发送邮件添加Power Apps以Dataverse作为数据源的附件File Column方式 目录 微软Power Platform使用Power Automate发送邮件添加Power Apps以Dataverse作为数据源的附件File Column方式1、需求背景介绍2、附件列File Column介绍3、如何在Po…

几种读nii图像方法的轴序比较

读 .nii / .nii.gz 图像并转成 numpy 可用 medpy.io、nibabel、itk、SimpleITK 几种方法&#xff0c;然而几种方法读出来的轴序有出入&#xff0c;本篇比较此几种方法。 Datum 所用数据来自 verse&#xff0c;经 iTomxy/data/verse/preprocess.py 预处理&#xff0c;朝向和轴…