首页 > 编程语言 >python变量问题

python变量问题

时间:2023-07-21 21:45:42浏览次数:42  
标签:变量 python django 问题 models 数组 import array my

目录

​ 在编程中,数组是相同类型的元素的集合。数组在Java,C / C ++,JavaScript等大多数编程语言中都很流行。但是,在Python中,它们并不常见。人们经常谈论Python数组时,他们谈论的是Python列表。

1.Delphi定义数组

ZCYL_sx  :array[0..3] of double;

2.Python定义数组

(1)列表

我们可以将列表视为数组,但是,我们不能限制列表中存储的元素的类型:

a = [1, 3.5, "Hello"]
(2)array.array
  • array.array: 来自 Python 的 array 模块,它创建的数组是固定类型的数组,只能存储指定的数据类型;
  • 在创建数组时,需要明确指定数组的类型,例如 'd' 表示 double 类型,'i' 表示 int 类型等;
  • Python 的 array 模块提供的数组功能相对较简单,适用于简单的数值存储,不支持矢量化计算和广播运算;
  • 不需要额外的安装。您可以直接使用 import array

​ 如果使用array模块创建数组 ,则数组的所有元素必须为相同的数字类型:

import array as arr
a = arr.array('d', [1, 3.5, "Hello"])   // Error

​ 那么,我们需要导入array模块以创建数组:

import array as arr
a = arr.array('d', [1.1, 3.5, 4.5])
print(a)

​ 创建一个包含4个元素的 double 类型的数组,并初始化为空

import array as arr
a = arr.array('d', [0.0, 0.0, 0.0, 0.0]) #
print(a)

在这里,我们创建了一个float类型数组。字母'd'是类型代码。这确定了创建过程中数组的类型,常用的类型代码:

Code C 类型 Python 类型 最小字节
'b' signed char int 1
'B' unsigned char int 1
'u' Py_UNICODE Unicode 2
'h' signed short int 2
'H' unsigned short int 2
'i' signed int int 2
'I' unsigned int int 2
'l' signed long int 4
'L' unsigned long int 4
'f' float float 4
'd' double float 8

python数组知识详见:Python 数组 - 菜鸟教程 (cainiaojc.com)

(3)np.zeros
  • np.zeros 来自 NumPy 库,它创建的数组是 NumPy 数组(numpy.ndarray),可以存储不同数据类型的元素,例如整数、浮点数、布尔值等;
  • 可以通过指定参数 dtype 来设置数组的数据类型;
  • NumPy 库提供了丰富的功能和数学运算,适用于科学计算和数据处理。您可以对 NumPy 数组进行矢量化计算,广播运算等;
  • 需要确保安装了 NumPy 库,并且导入 import numpy as np

​ 创建包含4个元素的 double 类型的数组,并初始化为空:

import numpy as np
my_array = np.zeros(4, dtype=np.float)

print(my_array)

3.Django框架定义数组

(1)ArrayField(依赖于 PostgreSQL 数据库)
  • 来自 Django 框架的 ArrayField,用于在 Django 模型中创建数据库字段的数组。
  • 只适用于 Django 项目,并用于数据库存储。
  • 在数据库中存储的数组大小是可变的,并且要指定数组的数据类型。
  • 适用于需要在 Django 模型中使用 size 参数,存储固定大小数组的情况。
from django.db import models
from django.contrib.postgres.fields import ArrayField

class MyModel(models.Model):
    my_array = ArrayField(models.FloatField(), size=4)

​ PgSQL(也称为PostgreSQL)是一种开源的关系型数据库管理系统(RDBMS),它以可靠性、稳定性和功能丰富而闻名。它由一个全球开发者社区维护,并且可以在多个平台上运行,包括Windows、Linux和Mac OS。

注意:

1)Models类文件引入ArrayField

from django.db import models
from django.contrib.postgres.fields import ArrayField

# 假设TBase_Stope在另一个文件中定义
from path.to.tbase_stope import TBase_Stope

class TExp_Stope(TBase_Stope):
    ZCYL_sx = ArrayField(models.FloatField(), size=4)

2)settings文件引入:

# settings.py

INSTALLED_APPS = [
    # ...
    'django_crontab',  # 添加这行
    # ...
]

3)安装相应包:

pip install django_crontab
pip install psycopg2   //因为 ArrayField 是依赖于 PostgreSQL 数据库的扩展功能。
(2)JSONField(支持PostgreSQL、MySQL、SQLite)

​ 在 Django 3.1 及更高版本中,MySQL支持JSON字段。您可以使用 Django 的 JSONField 来存储包含数组数据的 JSON 对象。在这种情况下,您可以将数组数据序列化为 JSON 字符串并存储在 JSONField 中。Django 中定义一个元素为4个的数组:

from django.db import models

class MyModel(models.Model):
    my_array = models.JSONField(default=list)

    def __str__(self):
        return str(self.my_array)

my_array_data = [1, 2, 3, 4]   # 创建一个包含4个元素的数组
my_model_instance = MyModel.objects.create(my_array=my_array_data) # 创建 MyModel 实例并保存数组数据
my_model_from_db = MyModel.objects.get(pk=my_model_instance.pk)  # 从数据库中获取保存的数据

print(my_model_from_db.my_array)  # 输出:[1, 2, 3, 4]
(3)TextField

​ 如果您的数组数据较为简单,您也可以使用 Django 的 TextField 来存储数组数据。在这种情况下,您可以将数组数据序列化为字符串,并将其存储在 TextField 中。

from django.db import models

class MyModel(models.Model):
    my_array = models.TextField()
(4)CharField + validators
from django.db import models
from django.core.validators import RegexValidator

class MyModel(models.Model):
    my_array = models.CharField(max_length=400, validators=[SizeValidator(4)])

我们使用SizeValidator来确保该字段只包含4个元素,下面是SizeValidator的一个简单实现:

class SizeValidator:
    def __init__(self, size):
        self.size = size

    def __call__(self, value):
        if value.count(',') != self.size - 1:
            raise ValidationError(f"数组只能包含 {self.size} 个元素")
(5)列表,不定长
from django.db import models

class MyModel(models.Model):
    my_list = models.TextField()

标签:变量,python,django,问题,models,数组,import,array,my
From: https://www.cnblogs.com/DQ-MINE/p/17572452.html

相关文章

  • Python全局变量和局部变量
    目录1.python的全局变量和局部变量第一种:global定义全局变量在自定义函数内部第二种:全局定义全局变量,并给其赋值2.python类中public,protected,private定义方式3.python中类的实例化1.python的全局变量和局部变量全局变量定义:在函数外部定义的变量。所有函数内部都可以使用......
  • Python基础day50
    RegExp对象//在JS中使用正则表达式,在js中如何使用正则呢?//定义正则表达式两种方式varreg1=newRegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}");//第一种定义方式varreg2=/^[a-zA-Z][a-zA-Z0-9]{5,11}///第二种定义方式//正则校验数据varres=reg2.test('jason666......
  • java private变量
    如何实现Java的私有变量作为一名经验丰富的开发者,我很高兴能够教会你如何实现Java中的私有变量。私有变量是指只能在类内部访问的变量,其他类无法直接访问或修改它们。下面是一个简单的步骤表格,展示了整个实现私有变量的流程。步骤描述1创建一个Java类2声明一个私有......
  • oracle 碰到过的问题
    1、指定的SID在本机上已经存在。请指定一个不同的SID 2、安装过程:未初始化服务句柄   http://space.yoka.com/blog/3063028/5692836.html   E:\oracle\product\10.2.0\db_1\NETWORK\ADMIN   将sqlnet.ora文件中的SQLNET_AUTHENTICATION_SERVICES=(NTS)修改为SQLNET_A......
  • 【补充】Django框架之IFrame中的跨域问题
    【一】iframe中的跨域问题详解在网页开发中浏览器会应用跨域安全策略,限制不同域名之间的交互。跨域问题指的是如果一个网页的脚本尝试访问另一个域名下的资源或与其通信时,浏览器会拒绝这样的请求。其中,使用<iframe>标签嵌套其他网页是一种常见的前端技术。然而,由于<i......
  • win10+python3.8+Anaconda3+cuda10.2+cudnn7.6+pytorch安装教程
    版本问题很重要,为了这个版本,真的吐血版!!!其他链接1.cuda10.2+cudnn7.6安装和测试的方法2.彻底卸载Anaconda3.新建的虚拟环境总是在c盘怎么解决1.安装Anaconda3在Anaconda安装的过程中,比较容易出错的环节是环境变量的配置,所以大家在配置环境变量的时候,要细心一些①安装......
  • 关于Antd中table列Fixed导致的expandedRowRender展开行错位问题
    右侧操作列的属性为fixed:'right'在展开行时出现列错位的问题打开element发现列属性设置为fixed后在DOM中是独立出来的解决办法:<a-table:columns="columns":data-source="data"bordered:pagination="false":scroll="{......
  • MegEngine Python 层模块串讲(上)
    在前面的文章中,我们简单介绍了在 MegEngineimperative 中的各模块以及它们的作用。对于新用户而言可能不太了解各个模块的使用方法,对于模块的结构和原理也是一头雾水。Python 作为现在深度学习领域的主流编程语言,其相关的模块自然也是深度学习框架的重中之重。模块串讲将对 ......
  • 【问题解决】docker版本v23.0后,构建Dockerfile中FROM私库镜像报错构建失败
    问题情况Docker版本在v23.0以后,只要Dockerfile中FROM的私库镜像不存在本地,就会报错:#我本地是v24.0.2版本Docker[root@localhostipd]#dockerbuild.-tharbor.xxx.com.cn/test/bap:2.7.1[+]Building0.6s(3/3)FINISHED......
  • Linux下编译安装python3.7 附带python-dev
    1、安装开发工具包sudoyum-ygroupinstall"Developmenttools" 2、安装依赖包sudoyum-yinstallzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develgdbm-develdb4-devellibpcap-develxz-devellibffi-devel ......