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

函数及变量

函数

使用def关键字

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

def add(*args):
    total = 0
    for val in args:
        total += val
    return 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 False
    return True if num != 1 else False

参数的作用域

def foo():
    b = 'hello'

    # Python中可以在函数内部再定义函数
    def bar():
        c = True
        print(a)
        print(b)
        print(c)

    bar()
    # print(c)  # NameError: name 'c' is not defined


if __name__ == '__main__':
    a = 100
    # print(b)  # NameError: name 'b' is not defined
    foo()

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

a=>全局部变量

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

c=>局部作用域

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

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

def foo():
    a = 200			# 相当于一个新的变量
    print(a)  # 200


if __name__ == '__main__':
    a = 100
    foo()
    print(a)  # 100

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

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

def foo():
    global a
    a = 200
    print(a)  # 200


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

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

def foo():
 global a
 a = 200
 print(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 = name
        self.age = age
    def __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.mfbz.cn/a/603011.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python中tkinter编程入门1

1 tkinter库简介 tkinter是Python的标准库&#xff0c;用来进行GUI&#xff08;Graphical User Interface&#xff0c;图形用户界面&#xff09;编程。 2 导入tkinter库 tkinter是Python默认的GUI库&#xff0c;因此&#xff0c;IDLE中已经包含了该库&#xff0c;使用时无需…

在uniapp中如何安装axios并解决跨域问题

目录 1、安装axios 2、导入 3、使用&#xff08;发请求&#xff09; 2.解决跨域问题 1.为什么要解决跨域问题&#xff1f; 2.前端如何解决跨域问题&#xff1f; 1、安装axios npm install axios 2、导入 在main.js中导入使用 import axios from axios; // 创建一个名…

男士内裤什么品牌质量好?男士内裤选购指南攻略分享

有很多小伙伴认为男士内裤只是穿在里面的&#xff0c;只要能穿就不讲究了。但实际上选择一些质量不好的男士内裤会让穿着舒适性十分不佳&#xff0c;同时还会因为不具备抗菌效果而滋生细菌&#xff0c;导致出现健康问题。 最近我也是深入研究了一番关于男士内裤&#xff0c;今天…

旺店通·企业奇门与金蝶云星空对接集成订单查询打通销售订单新增

旺店通企业奇门与金蝶云星空对接集成订单查询打通销售订单新增 对接源平台:旺店通企业奇门 慧策最先以旺店通ERP切入商家核心管理痛点——订单管理&#xff0c;之后围绕电商经营管理中的核心管理诉求&#xff0c;先后布局流量获取、会员管理、仓库管理等其他重要经营模块。慧策…

该怎么发外贸开发信才能瞄准大客户?

1.要知道80%的业务源自于大客户&#xff0c;要合理利用自己的时间。其实我自己发邮件一直都是粗发模式&#xff0c;效果也还可以&#xff0c;主要是因为我的客户都是展会上的&#xff0c;所以拒收和失败率会很低&#xff0c;而且客户意向度一直很高&#xff0c;但是花费的时间精…

泉州晋江厦门拉货最便宜的7个方式,建议收藏

众所周知&#xff0c;搬家、拉货的时间长、距离长&#xff0c;运费也比较贵。面对不菲的费用&#xff0c;很多人会比较谨慎&#xff0c;先网上搜搬家攻略&#xff0c;一番对比以后&#xff0c;找到最便宜的运输方式。那怎么运输最便宜最放心呢&#xff1f; 方式一&#xff1a;找…

[MDK] 介绍STM32使用C和C++混合编程的方法

目录 [MDK] 介绍STM32使用C和C混合编程的方法前言业务场景步骤1基础工程步骤2写代码步骤3添加cpp文件步骤4配置与编译上机现象后记 [MDK] 介绍STM32使用C和C混合编程的方法 前言 搞单片机编程大多数还是使用MDK编程&#xff0c;自己对MDK这个软件也比较熟悉&#xff0c;在网络…

【RAG 论文】Dense X 检索:将“命题”作为检索粒度

论文&#xff1a;Dense X Retrieval: What Retrieval Granularity Should We Use? ⭐⭐⭐⭐ Code: github.com/ct123098/factoid-wiki 文章目录 一、论文速读二、命题&#xff08;Proposition&#xff09;三、FactoidWiki四、实验及分析4.1 Passage Retrieval 任务4.2 Open-Do…

前端css中径向渐变(radial-gradient)的使用

前端css中径向渐变的使用 一、前言二、主要内容说明&#xff08;一&#xff09;、径向渐变的形状1.椭圆形渐变&#xff08;ellipse&#xff09;&#xff0c;源码12.源码1运行效果3.圆形渐变&#xff08;circle&#xff09;&#xff0c;源码24.源码2运行效果 &#xff08;二&…

遇到螺纹连接过程中的软连接,怎么办?——SunTorque智能扭矩系统

智能扭矩系统-智能拧紧系统-扭矩自动控制系统-SunTorque 在螺纹连接过程中遇到软连接时&#xff0c;首先需要明确软连接的概念及其特点。软连接通常指的是在螺栓拧紧过程中&#xff0c;由于紧固件与被连接件之间的材料、表面状况或装配工艺等因素&#xff0c;导致拧紧力矩不能…

分布式关系型数据库管理系统 OceanBase 安装和配置教程

&#x1f30a; 分布式关系型数据库管理系统 OceanBase 安装和配置教程 &#x1f680; 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝…

Kubernetes核心概念基本操作

1.1 Namespace命名空间 1.1.1 Namespace核心概念 Kubernetes 的 Namespace&#xff08;命名空间&#xff09;是一种用于创建逻辑隔离分区的机制&#xff0c;它的主要作用是用来实现多套环境的资源隔&#xff0c;它允许用户在同一个物理集群中模拟出多个虚拟集群的效果。以下是…

APP广告变现:自刷的秘密与规则

在移动互联网时代&#xff0c;广告已成为众多APP盈利的主要方式之一。对于开发者和运营者而言&#xff0c;如何通过广告变现提高收益是他们必须关注的问题。然而&#xff0c;在众多的变现方法中&#xff0c;“自刷广告”这一概念可能让一些人感到迷惑。实际上&#xff0c;只要在…

在Mars3d实现cesium的ImageryLayer自定义瓦片的层级与原点

需要自定义瓦片层级和原点&#xff0c;所以需要自己写第三方图层&#xff0c;但是之前写的很多方法&#xff0c;图层控制和显隐以及透明度&#xff0c;需要跟之前的交互一直&#xff0c;改动量太大的话不划算&#xff0c;所以直接看Mars3d的layer基类&#xff0c;把重写的image…

python词云图背景颜色修改

python词云图背景颜色修改 词云图介绍wordcloud介绍修改背景颜色 词云图介绍 词云图&#xff08;Word Cloud&#xff09;是一种文本数据的可视化表示形式&#xff0c;它通过字体大小、颜色、布局等视觉元素来展示文本中不同词汇的频率或重要性。词云图中&#xff0c;出现频率高…

怎么清理服务器的C盘?

有时候我们经常会遇到C盘被占满的情况&#xff0c;C盘被占满的原因有很多&#xff0c;下面我们就来分析下有可能导致C盘占满的原因&#xff1a; 第一种情况&#xff1a;中毒 打开服务器任务管理器选择进程&#xff0c;并且勾选显示所有用户的进程&#xff0c;我们可以点击映像…

PHPStudy 下载PHP提示“当前网络不稳定,下载失败”

错误信息 当前网络不稳定&#xff0c;下载失败 获取下载链接失败&#xff0c;请检查网络 假查网络 问题原因 xp.cn服务器的网络不稳定&#xff0c;不是你电脑的网络问题。 解决办法 第一步&#xff1a;下载现成的PHP文件 直接下载现成的文件&#xff0c;放到php目录。 将…

FlashAttention(flash-attn)安装

FlashAttention&#xff08;flash-attn&#xff09;安装 Flash Attention是一种注意力算法&#xff0c;用于减少这一问题&#xff0c;并更有效地缩放基于转换器的模型&#xff0c;从而实现更快的训练和推理。标准注意力机制使用高带宽内存&#xff08;HBM&#xff09;来存储、…

写一个函数返回参数二进制中1的个数--四种方法及原理解释

虽然本方法是java写的&#xff0c;但是其原理适用于大部分语言 方法一&#xff1a;通过取模%运算取出每一位比特位数值&#xff0c;再进行判断&#xff08;该方法不可判断负数&#xff09; 原理&#xff1a; 通过取模num % 2 1 取出该数的每一个二进制位数&#xff0c;再判…

Python selenium

1.搭建环境 1.安装&#xff1a; pip install msedge-selenium-tools 不要使用pip install selenium&#xff0c;我的电脑上没法运行 2.下载驱动 Microsoft Edge WebDriver |Microsoft Edge 开发人员 edge浏览器点设置---关于即可找到版本号&#xff0c;一定要下载对应版…