python基础---函数以及常用变量

函数及变量

函数

使用def关键字

在参数名前面的*表示args是一个可变参数

def add(*args):total = 0for val in args:total += valreturn total# 在调用add函数时可以传入0个或多个参数
print(add())
print(add(1))
print(add(1, 2))
print(add(1, 2, 3))
print(add(1, 3, 5, 7, 9))

由于Python没有函数重载的概念,那么后面的定义会覆盖之前的定义,也就意味着两个函数同名函数实际上只有一个是存在的。

Python中每个文件就代表了一个模块(module),我们在不同的模块中可以有同名的函数,在使用函数的时候我们通过import关键字导入指定的模块就可以区分到底要使用的是哪个模块中的foo函数

在引用的时候如果引用两个相同名字的函数, 后面的会覆盖前面的函数

  • 在定义函数模块的时候使用"if __name__ == '__main__':"关键字会在只有运行着一个模块的时候运行这一个模块
def is_prime(num):"""判断一个数是不是素数"""for factor in range(2, int(num ** 0.5) + 1):if num % factor == 0:return Falsereturn True if num != 1 else False

参数的作用域

def foo():b = 'hello'# Python中可以在函数内部再定义函数def bar():c = Trueprint(a)print(b)print(c)bar()# print(c)  # NameError: name 'c' is not definedif __name__ == '__main__':a = 100# print(b)  # NameError: name 'b' is not definedfoo()

这时候三个参数都可以打印出来

a=>全局部变量

b=>函数中的局部变量, 但是对于其内部的函数来说, b属于嵌套作用域

c=>局部作用域

Python查找一个变量时会按照“局部作用域”、“嵌套作用域”、“全局作用域”和“内置作用域”的顺序进行搜索,前三者我们在上面的代码中已经看到了,所谓的“内置作用域”就是Python内置的那些标识符,我们之前用过的inputprintint等都属于内置作用域。

当函数中的参数和外部的全局变量同名的时候使用局部变量

def foo():a = 200			# 相当于一个新的变量print(a)  # 200if __name__ == '__main__':a = 100foo()print(a)  # 100

在函数里面使用 全局变量 = value实际不是调用这一个全局变量, 是创建了一个新的一样名字的变量

想要这时候调用全局变量可以使用关键字global

def foo():global aa = 200print(a)  # 200if __name__ == '__main__':a = 100foo()print(a)  # 200

如果全局里面没有a会在下一行定义全局的a变量

def foo():global aa = 200print(a)if __name__ == "__main__":foo()print(a)

这个里面的第二个a可以正常打印

如果想要修改的是嵌套作用域里面的变量, 使用的是关键字nonlocal

  • 建议在操作的时候把所有的变量都在函数里面实现

数据的传递

函数调用时的机制:有一实际参数a,在调用时产生一个新的变量x(形式参数),x和a指向相同的地址。如果对x赋值,意味着改变了x指向的内存块,而不改变a的值。如果x是列表,对x[0]赋值,则改变了x[0]指向的内存块,而又因为x[0]的地址是存放在列表中,a又指向了这个列表,因此a也被修改了。

Python函数中修改变量(值传递、引用传递、可变对象、不可变对象)的深入思考_python引用类型在函数内修改-CSDN博客

这一点是引用部分的知识

注意: 如果函数的缺省参数是一个列表, 没有指定的时候这一个列表会一直是同一个列表, 可以使用append之类的方法进行改变

返回值

使用return, 没有return的时候实际返回的是一个NULL

可以一次性返回多个数值

def func():return a, b, c
num1, num2, num3 = func()

这一个返回的是一个元组

可以在定义函数的时候使用->类型定义这一个函数的返回值

def __init__(self) -> None:pass

函数的文档

def func():"""这是一个说明"""pass

在交互模式里面可以使用help(print)这样的方式获取文档

重复定义

定义两个函数的名字一样的时候, 会执行后面的那一个

缺省参数

也叫默认参数, 在定义参数的时候使用=进行赋值, 这一个参数没有传入的时候会使用默认的那一个值

def func(value1, value2 = 2):pass

命名参数

在函数调用的时候可以指定这一个参数的名字, 直接把这一个值传递给这一个参数

def func(a, b, c):pass
func(b = 3, b = 1, a = 3)

没有命名的参数需要在左边

不定长参数

使用的时候有两种

  • *args: 函数多余的参数会使用元组的形式在args里面, 这一个参数需要是未命名参数
def func_test(a, b, c, *args):print(a, b, c, args)func_test(2, 1, 3, 3, 4, 5)
PS E:\JHY\python\2024-4-22> python -u "e:\JHY\python\2024-4-22\main.py"
2 1 3 (3, 4, 5)

使用的时候如果希望参数传递的使用优先给不定长参数, 而不是给命名参数, 需要把*args这一个参数放在命名参数前面

  • **kwargs: 多余的参数会使用键值对的形式存在这一个参数里面, 这一个参数需要是命名参数
def func_test(a, b, c, **kwargs):print(a, b, c, kwargs)func_test(2, 1, 3, d = 3)
PS E:\JHY\python\2024-4-22> python -u "e:\JHY\python\2024-4-22\main.py"
2 1 3 {'d': 3}

这两个参数在传递的时候可以使用***进行拆包, 达到按照原来的样子传递的方式

常用变量

字符串

定义

使用单引号或者双引号定义, 也可以使用三个引号定义有折行的字符串

s1 = 'hello, world!'
s2 = "hello, world!"
# 以三个双引号或单引号开头的字符串可以折行
s3 = """
hello, 
world!
"""
print(s1, s2, s3, end='')
hello, world! hello, world! 
hello,
world!

\后面还可以跟一个八进制或者十六进制数来表示字符,例如\141\x61都代表小写字母a,前者是八进制的表示法,后者是十六进制的表示法。也可以在\后面跟Unicode字符编码来表示字符,例如\u9a86\u660a代表的是中文“骆昊”。

  • 如果不希望字符串中的\表示转义,我们可以通过在字符串的最前面加上字母r来加以说明

可以使用+运算符来实现字符串的拼接,可以使用*运算符来重复一个字符串的内容,可以使用innot in来判断一个字符串是否包含另外一个字符串(成员运算),我们也可以用[][:]运算符从字符串取出某个字符或某些字符(切片运算)

切片
str2 = 'abc123456'
# 从字符串中取出指定位置的字符(下标运算)
print(str2[2]) # c
# 字符串切片(从指定的开始索引到指定的结束索引)
print(str2[2:5]) # c12
print(str2[2:]) # c123456
print(str2[2::2]) # c246
print(str2[::2]) # ac246
print(str2[::-1]) # 654321cba
print(str2[-3:-1]) # 45

[起始位置:结束位置:每一次的步长]

切片赋值
a = [11, 22, 33, 44]
a[1:3] = [1, 2, 3, 4, 5, 6]
print(a)
PS E:\JHY\python\2024-4-22> python -u "e:\JHY\python\2024-4-22\main.py"
[11, 1, 2, 3, 4, 5, 6, 44]

会把这一个段进行替换

占位符

在Python中,print函数用于将内容输出到控制台。当使用print函数时,用{}来表示占位符,可以在字符串中插入变量的值。例如:

name = "Alice"
age = 30
print("My name is {} and I am {} years old.".format(name, age))

在上面的例子中,{}会被name和age的值替换,输出结果为"My name is Alice and I am 30 years old."

通过位置
>>>"{} {}".format("hello", "world")    # 不设置指定位置,按默认顺序
'hello world'>>> "{0} {1}".format("hello", "world")  # 设置指定位置
'hello world'>>> "{1} {0} {1}".format("hello", "world")  # 设置指定位置
'world hello world'
通过关键字
print("网站名:{name}, 地址 {url}".format(name="jiao", url="http://www.xvsenfeng.asia/"))# 通过字典设置参数
site = {"name": "jiao", "url": "http://www.xvsenfeng.asia/"}
print("网站名:{name}, 地址 {url}".format(**site))# 通过列表索引设置参数
my_list = ['jiao', 'http://www.xvsenfeng.asia/']
print("网站名:{0[0]}, 地址 {0[1]}".format(my_list))  # "0" 是必须的
class Person:def __init__(self, name, age):self.name = nameself.age = agedef __str__(self):return 'name is {self.name}, age is {self.age}'.format(self = self)

通过映射

class AssignValue(object):def __init__(self, value):self.value = value
my_value = AssignValue(6)
print('value 为: {0.value}'.format(my_value))  # "0" 是可选的
b_dict = {'name': "jiao", 'age': 21}
print('my name is {name}, age is {age}'.format(**b_dict))
print('my name is {info[name]}, age is {info[age]}'.format(info = b_dict))

在使使用一个字典的时候, 不能使用"key"的形式

数字格式输出描述
3.1415926{:.2f}3.14保留小数点后两位
3.1415926{:+.2f}+3.14带符号保留小数点后两位
-1{:-.2f}-1.00带符号保留小数点后两位
2.71828{:.0f}3不带小数
5{:0>2d}05数字补零 (填充左边, 宽度为2)
5{:x<4d}5xxx数字补x (填充右边, 宽度为4)
10{:x<4d}10xx数字补x (填充右边, 宽度为4)
1000000{:,}1,000,000以逗号分隔的数字格式
0.25{:.2%}25.00%百分比格式
1000000000{:.2e}1.00e+09指数记法
13{:>10d}13右对齐 (默认, 宽度为10)
13{:<10d}13左对齐 (宽度为10)
13{:^10d}13中间对齐 (宽度为10)
11'{:b}'.format(11) '{:d}'.format(11) '{:o}'.format(11) '{:x}'.format(11) '{:#x}'.format(11) '{:#X}'.format(11)1011 11 13 b 0xb 0XB进制

^, <, > 分别是居中、左对齐、右对齐,后面带宽度, : 号后面带填充的字符,只能是一个字符,不指定则默认是用空格填充。

+ 表示在正数前显示 +,负数前显示 -; (空格)表示在正数前加空格

b、d、o、x 分别是二进制、十进制、八进制、十六进制。

此外我们可以使用大括号 {} 来转义大括号,如下实例:

print ("{} 对应的位置是 {{0}}".format("runoob"))
runoob 对应的位置是 {0}

列表list

使用[], 用于存储多个数据

可以使用下标的方式进行访问, 也可以使用切片

使用len()可以获取这一个链表的长度

python里面的链表可以存储不同数据类型的数据

元组tuple

这一个和列表很像, 但是里面的数据不能进行修改, 使用()

这一个里面只有一个参数的时候, 需要加一个,

集合set

这一个里面不能有重复的数据, 使用{}

有重复的数据的时候会把里面的重复的数据只保存一次

这一个的顺序是随机的

字典dict

{key : value, key2 : value...}

这一个里面的key这一个不能重复

获取数据的时候需用使用key进行获取它对应的值

使用for对着一个进行遍历的时候, 实际获取到的时候这一个字典的key的信息(相当于dict.keys())

也可以对dict.values()进行遍历, 这一个可以直接获取这一个字典里面的value

也可以使用dict.items(), 可以获取这一个字典的元素, 使用一个元组返回一个键值对

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

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

相关文章

一份简历的制作

个人简历是求职者面试前最需要准备的一项工具。一份好的简历可以帮助求职者获得更多的面试机会&#xff0c;并且为面试时的表现奠定基础。以下介绍制作简历的几个注意点&#xff0c;仅供参考。 一、个人信息 姓名*性别联系方式 &#xff08;手机号&#xff09;电子邮箱&#…

【前端】HTML基础(2)

文章目录 前言一、HTML常见标签1、 注释标签1.1 标题标签1.2 段落标签1.3 换行标签 2、 格式化标签2.1 加粗标签2.2 倾斜标签2.3 删除线标签2.4 下划线标签 3、 图片标签3.1 src属性3.2 alt属性3.3 title属性3.4 图片大小3.5 图片边框 4、 超链接标签4.1 属性4.2 属性 前言 这篇…

Chromium编译指南2024 Windows11篇-配置depot_tools工具(二)

前言 在《Chromium编译指南2024&#xff08;一&#xff09;》我们探讨了Chromium编译前的准备工作和Visual Studio安装。 接下来&#xff0c;我们将详细介绍如何下载、解压并配置depot_tools工具&#xff0c;以便顺利进行后续的开发工作。 1. 下载解压depot_tools 包 下载d…

Python | Leetcode Python题解之第73题矩阵置零

题目&#xff1a; 题解&#xff1a; class Solution:def setZeroes(self, matrix: List[List[int]]) -> None:m, n len(matrix), len(matrix[0])flag_col0 Falsefor i in range(m):if matrix[i][0] 0:flag_col0 Truefor j in range(1, n):if matrix[i][j] 0:matrix[i]…

学习 Rust 的第 17 天:如何使用traits定义抽象方法

大家好&#xff0c; 欢迎来到学习Rust的第17天&#xff0c;今天我们将研究Rust编程语言中的trait。 如果你还没有阅读昨天的文章&#xff0c;我建议你去读一下&#xff0c;因为我们今天学习的概念会建立在昨天学到的“通用类型”概念之上。 介绍 Rust中的trait定义了一组类…

DS:链表的分类

欢迎来到Harper.Lee的学习世界&#xff01; 博主主页传送门&#xff1a;Harper.Lee的博客主页 想要一起进步的uu欢迎来后台找我哦&#xff01; 链表的结构⾮常多样&#xff0c;以下情况组合起来就有8种&#xff08;2 * 2 * 2&#xff09;链表结构。下面我们依次来认识它们吧&am…

大数据面试题(十):Hive的高频面试考点(二)

文章目录 Hive的高频面试考点 一、请说明Hive中 sort by ,order by ,cluster by ,distribute by各代表什么意思

Mysql 8.0 -- 最新版本安装(保姆级教程)

Mysql 8.0 -- 最新版本安装&#xff08;保姆级教程&#xff09; ​​ 一&#xff0c;下载Mysql数据库&#xff1a; 官网链接&#xff1a;https://www.mysql.com/downloads/ 二&#xff0c;安装Mysql: 三&#xff0c;找到Mysql安装目录&#xff1a; 找到mysql安装目录&#xf…

【信息系统项目管理师知识点速记】资源管理:获取资源

获取资源:项目成功的关键 在项目管理中,获取资源是确保项目成功的关键步骤之一。本文将探讨获取资源的过程,包括输入、工具与技术以及输出。 输入 1. 项目管理计划 资源管理计划: 提供了如何获取项目资源的指南。成本基准: 提供了项目活动的总体预算。采购管理计划: 包…

攻防世界-NewsCenter

题目信息 分析过程 题目打开是有个输入框可以用来输入搜索信息&#xff0c;初步判断是个sql注入的题目。接下来判断能否进行sql注入&#xff1a; 输入 hi&#xff0c;有搜索结果&#xff0c;如下图: 输入hi’,无结果&#xff0c;如下图&#xff1a; 初步判定是hi‘后面还有单引…

MongoDB聚合运算符:$toHashedIndexKey

MongoDB聚合运算符&#xff1a;$toHashedIndexKey 文章目录 MongoDB聚合运算符&#xff1a;$toHashedIndexKey语法举例角度的双曲正切 $toHashedIndexKey计算并返回输入表达式的哈希值&#xff0c;其使用的哈希函数与MongoDB创建哈希索引相同。哈希函数将键值或字符串映射到固定…

设计模式(2)创造型设计模式

创建型模式 创建型模式1.工厂模式1.1 抽象工厂模式&#xff08;Abstract factory&#xff09;1.2 工厂方法模式&#xff08;Factory Method&#xff09;1.3 简单工厂模式&#xff08;Simple Factory&#xff09; 2. 建造者模式&#xff08;Builder&#xff09;3. 原型模式&…

PHP介绍

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;PHP❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、PHP是什么&#xff1f; 二、 PHP 文件是什么&#xff1f; 三、PHP能做什么&#xff1f; 四、P…

[Android]四大组件简介

在 Android 开发中&#xff0c;“四大组件”&#xff08;Four Major Components&#xff09;是指构成 Android 应用程序的四种核心组件&#xff0c;它们通过各自的方式与系统交互&#xff0c;实现应用的多样功能。这些组件是&#xff1a;Activity、Service、Broadcast Receiver…

音响的无源辐射器

定义&#xff1a; 无源辐射器通常被用来调整低音&#xff0c;使得设计者能够调节音箱整体的音色。无源辐射器在音箱内主动单元对箱体内空气的带动下进行被动发声。 通常使用无源辐射器来代替倒相管都是用以调节较小箱体的音质和使其具有更好的低音表现。尤其是在一些情况下&a…

6个月小猫成长必备!福派斯无麸质幼猫粮评测

你知道吗&#xff1f;给小猫选择适合的猫粮是一件非常不容易但很重要的事情。那么&#xff0c;对于6个月大的小猫来说&#xff0c;什么样的猫粮是最适合它们的呢&#xff1f;&#x1f431; 我们首先要考虑的是猫粮的营养成分。6个月大的小猫正处于快速生长期&#xff0c;所以需…

远程连接是什么?

远程连接是指通过网络连接两个或多个设备&#xff0c;实现远程访问、控制或传输数据的技术。它在现代科技发展中起到了重要作用&#xff0c;使得我们可以随时随地与远程设备进行交互、管理和操作。 天联组网是一种高效的远程连接解决方案&#xff0c;它因为操作简单、跨平台应用…

07_Z Garbage Collector (ZGC)

Z垃圾收集器&#xff08;ZGC&#xff09;是一种可扩展的低延迟垃圾收集器。ZGC可以在不超过一毫秒的情况下并发执行所有昂贵的工作&#xff0c;而不会停止应用程序线程的执行。它适用于需要低延迟的应用程序。暂停时间与正在使用的堆大小无关。ZGC适用于从几百兆字节到16TB的堆…

git使用注意事项事项

以下操作均在gitee平台上实现 文章目录 1、本地仓库和远程仓库有冲突2、git提交自动忽略某些文件3、git无法push提交到远程仓库 1、本地仓库和远程仓库有冲突 在web端修改了文件内容或者删除了文件&#xff0c;本地仓库需要重新把远程仓库拉取到本地&#xff0c;或者强制提交到…

关于面试真题的压迫

1.请描述一下您在使用JavaScript进行DOM操作时&#xff0c;如何提高页面性能和用户体验&#xff1f; 使用事件委托&#xff1a;在父元素上监听事件&#xff0c;而不是为每个子元素都添加事件监听器。这样可以减少事件处理程序的数量&#xff0c;提高性能。 缓存DOM查询&#x…