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

embedded/2024/10/18 14:25:58/

函数及变量

函数

使用def关键字

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

python">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__':"关键字会在只有运行着一个模块的时候运行这一个模块
python">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

参数的作用域

python">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等都属于内置作用域。

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

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

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

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

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

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

python">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

可以一次性返回多个数值

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

这一个返回的是一个元组

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

python">def __init__(self) -> None:pass

函数的文档

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

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

重复定义

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

缺省参数

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

python">def func(value1, value2 = 2):pass

命名参数

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

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

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

不定长参数

使用的时候有两种

  • *args: 函数多余的参数会使用元组的形式在args里面, 这一个参数需要是未命名参数
python">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: 多余的参数会使用键值对的形式存在这一个参数里面, 这一个参数需要是命名参数
python">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}

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

常用变量

字符串

定义

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

python">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来判断一个字符串是否包含另外一个字符串(成员运算),我们也可以用[][:]运算符从字符串取出某个字符或某些字符(切片运算)

切片
python">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

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

切片赋值
python">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函数时,用{}来表示占位符,可以在字符串中插入变量的值。例如:

python">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."

通过位置
python">>>>"{} {}".format("hello", "world")    # 不设置指定位置,按默认顺序
'hello world'>>> "{0} {1}".format("hello", "world")  # 设置指定位置
'hello world'>>> "{1} {0} {1}".format("hello", "world")  # 设置指定位置
'world hello world'
通过关键字
python">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" 是必须的
python">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)

通过映射

python">class AssignValue(object):def __init__(self, value):self.value = value
my_value = AssignValue(6)
print('value 为: {0.value}'.format(my_value))  # "0" 是可选的
python">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 分别是二进制、十进制、八进制、十六进制。

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

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

列表list

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

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

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

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

元组tuple

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

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

集合set

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

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

这一个的顺序是随机的

字典dict

python">{key : value, key2 : value...}

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

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

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

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

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


http://www.ppmy.cn/embedded/38172.html

相关文章

2-qt之信号与槽-简单实例讲解

前言、因实践课程讲解需求&#xff0c;简单介绍下qt的信号与槽。 一、了解信号与槽 怎样使用信号与槽&#xff1f; 概览 还记得 X-Window 上老旧的回调函数系统吗&#xff1f;通常它不是类型安全的并且很复杂。&#xff08;使用&#xff09;它&#xff08;会&#xff09;有很多…

软考143-下午题-【试题二】:E-R图、关系模式

一、分值与目标 15分&#xff0c;目标10 二、题目形式 示例&#xff1a; 三、E-R图的基本图形元素 示例&#xff1a; 3-1、实体 1、弱实体 在现实世界中有一种特殊的联系&#xff0c;这种联系代表实体间的所有 (Ownership) 关系&#xff0c;例如&#xff1a;职工与家属的联系…

HTML5实现酷炫个人产品推广、工具推广、信息推广、个人主页、个人介绍、酷炫官网、门户网站模板源码

文章目录 1.设计来源1.1 主界面1.2 我的产品界面1.3 关于我们界面1.4 照片墙界面1.5 发展历程界面1.6 优秀人才界面1.7 热门产品界面1.8 联系我们界面 2.灵活调整模块3.效果和源码3.1 动态效果3.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.c…

C语言----杨辉三角

各位看官们好。学习到这里想必大家应该对C语言的了解也是很深刻的了吧。但是我们也不能忘记我们一起学习的知识啊。在我们以前学习C语言的时候我想大家应该都听说过杨辉三角吧。虽然我们把其中的规律找到那么这个代码就简单很多了。那么接下里我们就来讲讲杨辉三角。 首先我们先…

【项目学习01_2024.05.01_Day03】

学习笔记 3.6 开发业务层3.6.1 创建数据字典表3.6.2 编写Service3.6.3 测试Service 3.7 接口测试3.7.1 接口完善3.7.2 Httpclient测试 3.8 前后端联调3.8.1 准备环境3.8.2 安装系统管理服务3.8.3 解决跨域问题解决跨域的方法&#xff1a;我们准备使用方案2解决跨域问题。在内容…

QX-mini51单片机学习-----(3)流水灯

目录 1宏定义 2函数的定义 3延时函数 4标准库函数中的循环移位函数 5循环移位函数与左移和右移运算符的区别 6实例 7keil中DeBug的用法 1宏定义 是预处理语句不需要分号 #define uchar unsigned char//此时uchar代替unsigned char typedef是关键字 后面是接分号…

如何购买阿里云99计划的ECS云服务器?99元购买阿里云2核2G3M服务器教程

阿里云助力中小企业和开发者无忧上云的“99计划”中有两款性价比超高的ECS云服务器&#xff0c;2026年3月31日活动结束前新购和续费价格一样。 其中个人和企业新老用户同享的2核2G3M服务器仅需99元/年&#xff08;续费同价&#xff09;&#xff0c;企业新老用户同学的2核4G5M仅…

Linux cmake 初窥【2】

1.开发背景 基于上一篇的基础上&#xff0c;再次升级 2.开发需求 基于 cmake 指定源文件目录可以是多个文件夹&#xff0c;多层目录 3.开发环境 ubuntu 20.04 cmake-3.23.1 4.实现步骤 4.1 准备源码文件 工程目录如下 顶层脚本 compile.sh 负责执行 cmake 操作&#xff0…