【DevOps】Python+Golang(一)

news2024/9/29 11:24:11

Python

is和==的区别

is检查两个对象是否是同一个对象,即它们的内存地址是否相同。如果是同一个对象,则返回True,否则返回False。

==检查两个对象是否相等,即它们的值是否相同。如果值相同,则返回True,否则返回False

标识符(变量):是对象的引用,是指向对象的内存地址的指针。

在内存中创建某对象,由python解释器为其分配内存地址

不可变对象 vs 可变对象
一旦创建,值是否可以修改

字符串 VS 列表

字符串驻留技术:为了优化内存使用,python解释器在内存中维护了一个字符串池,也称缓存。
即:创建一个新的字符串对象时,先检查其是否已经存在池里,若存在,则返回现有对象的引用,所以相同字符串字面值的内存地址是相同的。

那为什么没有列表驻留技术(doge)???

列表可变(可添加、删除或者修改元素)。
假设有此技术,会带来一些问题,比如:有两个包含相同元素的列表a,b。假设它们共享同一个内存地址,修改其中一个列表的元素,另一个列表也会受到影响。将难以调试。
为避免,解释器不会对列表进行驻留优化,而是在需要时,根据需要创建新的列表对象,确保其独立状态。

Golang

编码风格写入语法,函数式编程

变量声明+赋值
变量只能声明一次,不要重复声明!(确保每个变量都具有唯一的标识符,避免对程序造成混乱和错误)
定义了变量,一定要用!

关键字var或者短变量声明:=
注意,短变量声明只能用于函数内部,而 var 声明可以用于全局变量和局部变量。

从内存地址角度理解:
在Go中,当我们声明一个变量时,编译器会分配一段内存区域来保存该变量的值,并使用其标识符来引用该内存区域。每个变量都具有唯一的标识符

a和b的值相同,但标识符不同

package main

import "fmt"

func main() {
	var a int = 1
	var b int = 1

	fmt.Printf("a: %p\n", &a)
	fmt.Printf("b: %p\n", &b)
}

a和b的值相同,但标识符不同,结果如图
在这里插入图片描述
%p 是一个格式化字符串,用于打印指针的内存地址。
&a 表示取变量 a 的地址,&b 同理。

常量语法

const identifier [type] = value

identifier 是常量的名称,遵循标识符的命名规则。
type 是可选的,表示常量的类型。如果不指定类型,编译器会根据值推断出类型。
value 是常量的值,常量表达式。

示例:

const Pi = 3.14159265359 // 定义一个无类型的浮点型常量
const Age int = 18      // 定义一个有类型的整型常量
const Name string = "Golang" //定义一个有类型的字符串常量

注意的是,在 Golang 中,常量的值不能被修改,否则会导致编译错误。

没有定义常量表达式,就跟前面的表达式一样

package main

import "fmt"

func main() {
	const (
		a = 1               // 常量 a 的值为 1
		b                   // 常量 b 的值与上一行相同,也为 1
		c = a + b           // 常量 c 的值为 2
		d = "Hello, world!" // 常量 d 的值为字符串 "Hello, world!"
		e = iota
	)

	fmt.Println(a, b, c, d,)
	fmt.Println(e)
}
}

在定义常量 b 的时候,我们没有显式地给它赋值,而是让它等于上一行的值,即常量 a 的值,这种方式称为“隐式赋值”。
注意,在这里隐式赋值只适用于常量的情况,对于变量则不存在这种隐式赋值的情况。

iota是一个预定义变量,用来计数的(自增)。当使用 const 关键字定义一个枚举类型时,如果将第一个常量的值设为 iota,则随后定义的每个常量都将自动递增。从0开始计数,也可以表示第几个变量了。

golang的输入输出

可以通过标准库 fmtbufio 实现。

fmt:
fmt.Scan()函数从标准输入中读取一个空格分隔的值,并将其存储在传递给函数的参数中。当遇到换行符或EOF时,函数停止读取输入。因此,如果您想一次读取多个值,则必须在每个值后面输入一个空格。

fmt.Scanf()函数可以使用格式字符串来指定要读取的值的类型和数量。这使得读取不同类型的数据更加方便。例如,要读取一个整数和一个字符串,您可以使用以下代码:

var i int
var s string
fmt.Scanf("%d %s", &i, &s)

fmt.Scanln()函数会读取整行输入,直到遇到换行符为止。它将输入作为单个字符串读取,并且不需要在每个值之间输入空格。例如,要读取一行文本,您可以使用以下代码:

var s string
fmt.Scanln(&s)
fmt.Println(s)


// 结果
kjfdsg,das

kjfdsg,das

bufio

计算机组成 = 计算 + 存储 + io

package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	//也可以读文件
	reader := bufio.NewReader(os.Stdin)
	//读到换行符结束,返回结果有两个,匿名变量(_)接受变量,不使用
	line, e := reader.ReadString('\n')
	fmt.Println("line=", line)
	fmt.Println("error=", e)
}

fmt.Print()原样输出不换行
fmt.Println()自动添加换行符和空格分隔符

fmt.Println("helllo", "world")
fmt.Println("jiangda")

//结果
hello world
jiangda

fmt.Printf()格式化输出

name := "jiangda"
fmt.Printf("hello, %s", name)

//结果
hello, jiangda

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

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

相关文章

Maven-基础

Maven Maven是专门用于管理和构建Java项目的工具,主要功能有: 提供了一套标准化的项目结构 Maven提供了一套标准化的项目结构,所有的IDE使用Maven构建的项目完全一样 提供了一套标准化的构建流程(编译,测试&#xff0c…

jmeter性能测试进阶使用纪要

目录 目录 随机变量:实现注册手机号不重复分配 正则表达式:token等变量提取 HTTP header manager:token传参Authorization使用 后置BeanShell PostProcessor设置prev.setDataEncoding(“utf-8”):响应中文乱码处理 同步定时…

与AI合作穿越剧 编剧徐婷:AI脑洞大,但无法替代人类的情感表达

热门喜剧秀《周六夜现场》本季提前结束,美剧《亿万》最新第七季的更新搁浅,漫威新电影《新刀锋战士》暂停拍摄……美国影视娱乐行业的编剧们以抵制AI为由的大罢工,开始影响诸多作品的产出,据说造成了100亿美元的损失。 这场罢工已…

深入理解Linux虚拟内存管理(八)

系列文章目录 Linux 内核设计与实现 深入理解 Linux 内核(一) 深入理解 Linux 内核(二) Linux 设备驱动程序(一) Linux 设备驱动程序(二) Linux 设备驱动程序(三&#xf…

Hive企业级调优

Hive企业级调优 调优原则已经在MR优化阶段已经有核心描述,优化Hive可以按照MR的优化思路来执行 优化的主要考虑方面: 环境方面:服务器的配置、容器的配置、环境搭建具体软件配置参数:代码级别的优化 调优的主要原则: ​ 20/80原则非常重要,简单的说80…

骨传导蓝牙耳机排行榜10强,介绍几款不错的户外骨传导耳机

随着骨传导技术的不断发展,骨传导耳机的性能也得到了很大的提升,特别是在音质和佩戴舒适性上,都有了很大的提升。很多人在听音乐的时候,都会佩戴骨传导耳机,因为骨传导耳机具有开放双耳的特点,长时间佩戴也…

Android Jetpack Compose 中的Tabs(TabLayout)

Android Jetpack Compose 中的Tabs(TabLayout) 添加依赖 我们需要依赖于2个 accompanist组件,你可以从下面链接中获取最新版本https://github.com/google/accompanist/tree/main/pager#pager-composable-for-jetpack-compose def accompan…

探索LowLatency的HLS低延迟直播协议

HLS全称为HTTP Live Streaming,其中m3u8作为描述协议,指向一系列切片文件。支持多码流与自适应码率,支持广告无缝播放,支持CMAF协议的低延时直播,也支持CDN动态选择。 我们先看下HLS整体架构,由三部分构成…

莫顿曲线映射 一维到二维的变换 MD(莫顿)码 反向变换 线性四叉树

函数声明&#xff1a; #include <stdio.h> #include <math.h>#define MAXSIZE 200 #define N 8typedef struct //栈的存储结构 {int data[MAXSIZE];int MD[MAXSIZE];int top; }stack1;void stackinitiate(stack1 *s); //初始化栈 void push (s…

【已解决】c++ 读入灰度图进行dft变换报错

报错原因&#xff1a; 1、imread函数读入默认参数为1&#xff0c;即彩色三通道图像&#xff0c;而我们要指定参数为0&#xff0c;读入灰度图像 2、在进行傅里叶变换前要将图像数据类型转为CV_32F&#xff0c;因为默认灰度图像类型为CV_8U 正确代码&#xff1a; #include <…

Vue中如何进行滚动加载与无限滚动?

Vue中如何进行滚动加载与无限滚动&#xff1f; 随着Web应用程序的复杂性和数据量的增加&#xff0c;滚动加载和无限滚动成为了Web开发中常见的需求。在Vue中&#xff0c;我们可以使用一些插件和技术来实现这些功能。 本文将介绍Vue中如何进行滚动加载和无限滚动&#xff0c;包…

内核实现信号捕捉的过程,以及要用到的函数sigaction

1.信号捕捉过程 1.在执行主控制流程的某条指令时因为中断、异常或系统调用进入内核。 2.内核处理完异常准备回用户模式之前先处理当前进程中可以递送的信号。 3.do_signal(); 如果信号的处理动作为自定义的信号处理函数&#xff0c;则回到用户模式执行信号处理函数&#xff08…

prometheus监控应用数据(一)

prometheus监控应用数据(一) 以下代码实现均使用go语言,至于其他语言请参照其他语言的prometheus api文档 获取go package: prometheus: go get -u github.com/prometheus/client_golang/prometheus搭建程序基本骨架 IP地址暂定为: localhost启用prometheus的监控端口是2112以…

互联网大厂Java面试题1500+附答案详解(2023版)

很多 Java 工程师的技术不错&#xff0c;但是一面试就头疼&#xff0c;10 次面试 9 次都是被刷&#xff0c;过的那次还是去了家不知名的小公司。 问题就在于&#xff1a;面试有技巧&#xff0c;而你不会把自己的能力表达给面试官。 应届生&#xff1a;你该如何准备简历&#…

2020310

Selenium: 基于WebDriver协议的 Web应用程序测试的工具 精简版&#xff1a; selenium脚本通过http请求发送命令和参数给httpserver httpserver通过json wire protocol格式转发命令和参数给webdriver webdriver通过原生API或者JavaScript代码执行操作给浏览器 浏览器通过json wi…

材料微观结构表征技术:电子背散射衍射EBSD

材料微观结构表征技术&#xff1a;电子背散射衍射EBSD 电子背散射衍射&#xff08;EBSD&#xff09;是一种材料表征技术&#xff0c;通过使用电子束对材料进行照射&#xff0c;并测量背向散射的电子的衍射模式&#xff0c;可以提供关于材料微观结构的详细信息。这项技术结合了…

DAY 75 【分布式应用】消息队列之卡夫卡 + EFLFK集群部署

pache公司的软件包官方下载地址&#xff1a;archive.apache.org/dist/ 注&#xff1a;kafka从3.0版本之后&#xff0c;不再依赖zookeeper Zookeeper 概述 官方下载地址&#xff1a;https://archive.apache.org/dist/zookeeper/ Zookeeper 定义 Zookeeper是一个开源的分布式…

【Linux脚本篇】循环语句-for

目录 &#x1f341;for的语法格式 &#x1f341;for循环案例 &#x1f343;案例一&#xff1a;循环创建文件 &#x1f343;案例二&#xff1a;应用引号或转义符 &#x1f343;案例三&#xff1a;从变量中取值 &#x1f343;案例四&#xff1a;从命令中取值 &#x1f343;案例五…

Vulkan入门精要

Vulkan入门精要 (fuxiii.github.io)https://fuxiii.github.io/Essentials.of.Vulkan/

开始在适用于 Linux 的 Windows 子系统上使用 Git

目录 Git 可以安装在 Windows 和 WSL 上安装 GitGit 配置文件设置Git 凭据管理器设置使用 SSH 的 GitAzure 的其他配置添加 Git Ignore 文件Git 和 VS CodeGit 行尾其他资源 Git 是最常用的版本控制系统。 使用 Git&#xff0c;可以跟踪对文件所做的更改&#xff0c;以便记录已…