Python Learning-Basic 4 modules and packages and common modules

Source: Internet
Author: User
Tags assert define function month name naming convention shuffle timedelta

A Module introduction
1. What is a module?
#常见的场景: A module is a python file that contains a set of functions, such as spam.py, which is named spam and can be used via import spam. #在python中, the module is used the same way, but in fact, the module can be divided into four general categories: 1. py file 2, written in Python, has been compiled into a shared library or DLL's C or C + + extension 3 folders that organize a series of modules together (note: There is a __ in the folder init__.py file, which is called a package) 4 built-in modules written with C and linked to the Python interpreter
2. Why should I use the module?
1, the organization of procedures from the file level, more convenient management with the development of the program, more and more functions, in order to facilitate management, we usually divide the program into a document, so that the structure of the program is clearer and easier to manage. At this time, we can not only use these files as scripts to execute, but also as a module to import into other modules, the implementation of the function of the re-use of the same principle, take doctrine, improve the development efficiency, we can also download others to write the module and then import into their own projects, this take doctrine, Can greatly improve our development efficiency #ps: If you exit the Python interpreter and then re-enter, then the functions or variables that you defined previously will be lost, so we usually write the program to a file so that it can be saved permanently and, if necessary, through Python test.py way to execute, at this time test.py is called script scripts.
3, take spam.py as an example to introduce the use of the module: file name spam.py, module name spam
#spam. Pyprint (' from the spam.py ') Money=1000def read1 ():    print (' Spam module: ', Money) def read2 ():    print (' spam module ')    read1 () def change ():    Global Money    money=0
Import of two use modules
1, the use of import
#模块可以包含可执行的语句和函数的定义, the purpose of these statements is to initialize the module, which executes only when the module name is first encountered when importing the import statement (the import statement can be used anywhere in the program and is imported multiple times for the same module. To prevent you from repeating the import, the Python optimization means that the module name is loaded into memory after the first import, and the subsequent import statement only adds a reference to the module object that has been loaded into memory and does not re-execute the statements within the module, as #test. Pyimport Spam #只在第一次导入时才执行spam. py inside the code, the explicit effect here is to print only once ' from the spam.py ', of course, the other top-level code is also executed, but does not show the effect. Import spamimport spamimport spam ' ' Execution result: from the spam.py '
2, when the first import module will do three things, duplicate import will directly refer to the memory of the loaded results
#1. Create a new namespace for the source file (spam module), and the functions and methods defined in spam are the namespaces that are accessed when using global. #2. Execute the code contained in the module in the newly created namespace, see initial import spam    hint: What exactly did you do when you imported the module? In    fact function definitions is also ' statements ' that is     ' executed '; the execution of a module-level function Definition     enters the function name in the module ' s global symbol table.    In fact, the function definition is also the "executed" statement, the execution of the module-level function definition puts the function name    into the module global namespace table, with Globals () to view the # #. Create a name spam to reference the namespace    the name and the variable name are no different. The first type of ', and the use of spam. Name can be accessed by the name defined in the    spam.py file, spam. Name and test.py name from    two completely different places.
3, the imported module has a separate name space
Each module is a separate namespace, defined in this module of the function, the namespace of the module as the global namespace, so that when we write our own module, we do not have to worry about our definition in our own module global variables will be imported, and the user's global variables conflict
Sample code 1::money does not conflict with Spam.money
#test. Pyimport spam money=10print (Spam.money) "Execution result: from the spam.py1000"

Sample code 2:READ1 does not conflict with Spam.read1
#test. Pyimport spamdef read1 ():    print (' ======== ') spam.read1 () ' Execution result: from the Spam.pyspam->read1->money 1000 ""
Example code 3: global variable to perform the Spam.change () operation money is still in spam
#test. Pyimport Spammoney=1spam.change () print (money) ' execution result: from the Spam.py1 '
4. Alias for module name
How to alias a module that has already been imported is useful for writing extensible code
1 import spam as sm2 print (Sm.money)
There are two SQL modules MySQL and Oracle, depending on the user's input, choose different SQL functions
#mysql. Pydef sqlparse ():    print (' from MySQL sqlparse ') #oracle. Pydef sqlparse ():    print (' from Oracle Sqlparse ') #test. Pydb_type=input (' >>: ') if db_type = = ' MySQL ':    import mysql as dbelif db_type = = ' Oracle ':    

Assuming there are two modules xmlreader.py and csvreader.py, they all define function read_data (filename): Used to read some data from a file, but in a different input format. You can write code to selectively pick the Read module
if File_format = = ' xml ':    import xmlreader as readerelif File_format = = ' csv ':    import Csvreader as Readerdata=reade R.read_date (filename)
5. Import multiple modules in one line
1 Import Sys,os,re
three use of the module from ... import ...
1. From...import ... The use
From spam import read1,read2
2. Comparison of From...import and import
#唯一的区别就是: Use From...import ... is to import the name in the spam directly into the current namespace, so in the current namespace, the name can be used directly, without prefixing: spam. #from ... import ... In a way that's good and bad: it's easy    to use: It    's easy to clash with names in the current execution file
Verify one: The current location is used directly with Read1 and Read2, when executed, still with the spam.py file global namespace
#测试一: Imported function read1, execution still back to spam.py for global variables money#test.pyfrom spam import read1money=1000read1 () "' Execution result: from the Spam.pyspam->read1->money "#测试二: Imported function read2, need to call READ1 () when executing, still return to spam.py to find Read1 () #test. Pyfrom Spam Import Read2def read1 ():    print (' ========== ') read2 () "Execution result: from the spam.pyspam->read2 calling Readspam-> Read1->money 1000 "
Verification Two: If there is currently duplicate name Read1 or read2, then there will be coverage effect.
#测试三: Imported function Read1, Read1 overridden by the current location definition #test.pyfrom spam import read1def read1 ():    print (' ========== ') read1 () ' Execution result: From the spam.py========== '
Validation three: The imported method is always based on the source file when it is executed
From spam import money,read1money=100 #将当前位置的名字money绑定到了100print (Money) #打印当前的名字read1 () #读取spam. PY name Money, still 1000 ' "From the Spam.py100spam->read1->money 1000"
3, also support as
1 from spam import read1 as read
4, a row to import multiple names
From spam import Read1,read2,money
5, From...import *
#from Spam Import * Imports all names in spam that are not preceded by an underscore (_) into the current position # Most of the cases our Python program should not use this type of import, because * you don't know what name you're importing, it's likely to overwrite the name you've already defined. And the readability is extremely poor, there is no problem when importing in an interactive environment.
From spam import * #将模块spam中所有的名字都导入到当前名称空间print ("Money") print (read1) print (read2) print (change) "Execution result: from the Spam.py1000<function read1 at 0x1012e8158><function read2 @ 0x1012e81e0><function Change at 0x1012e8268 > "
You can use __all__ to control * (to release the new version) and add a new line to the spam.py
__all__=[' money ', ' read1 '] #这样在另外一个文件中用from spam import * This can import two names specified in the list
Four overloading of modules (learn)

  

For performance reasons, each module is imported only once, put into the dictionary sys.module, if you change the contents of the module, you must restart the program, Python does not support reloading or uninstalling the previously imported modules,

Some students may think of removing a module directly from the Sys.module can not be uninstalled, note that you deleted the Sys.module module object may still be referenced by other program components, so it will not be clear.

In particular, we refer to a class in this module, which produces many objects with this class, so that these objects have references to this module.

If it's just a module that you want to test interactively, use importlib.reload (), e.g. import importlib; Importlib.reload (ModuleName), which can only be used for test environments.

Initial content of the aa.py
Def func1 (): print (' func1 ')

Executive test.py
1 Import time,importlib2 Import Aa3 4 Time.sleep (5) # importlib.reload (AA) 6 aa.func1 ()

In 20 seconds of waiting time, modify the contents of func1 in aa.py, waiting for the result of test.py.

Open importlib comments, re-test

five py file distinguishes between two purposes: module and script
#编写好的一个python文件可以有两种用途:    One: script, a file is the whole program, used to be executed    two: module, the file contains a bunch of functions, used to be imported using #python for our built-in global variable __name__,    When a file is executed as a script: __name__ equals ' __main__ ' when the    file is imported as a module: __name__ equals the module name # function: Used to control the. py file in different scenarios to perform different logic    if __name__ = = ' _ _main__ ':
#fib. Pydef fib (n):    # write Fibonacci series up to n    A, b = 0, 1 while    b < n:        print (b, end= ")        A, b = B, a+b    print () def fib2 (n):   # return Fibonacci series up to n    result = []    A, b = 0, 1 while    b < n :        result.append (b)        A, B = B, a+b    return resultif __name__ = = "__main__":    import sys    fib (int ( SYS.ARGV[1]) #执行: Python fib.py <arguments>python fib.py #在命令行
Six module search path

The order in which the modules are found is: modules that are loaded in memory, built-in modules->sys.path paths

#模块的查找顺序1, when a module is first imported (such as spam), it is first checked to see if the module has been loaded into memory (the memory that corresponds to the current execution file's namespace), and if so, a direct reference to the Ps:python interpreter will automatically load some modules into memory at startup. You can use Sys.modules to view 2, if not, the interpreter looks for the built-in module 3 with the same name, and then looks for the spam.py file from the list of directories given by Sys.path if it is not already found. The value of the initialization of the #sys. Path is from: The directory containing the input script (or the current directory if no file is specified). PYTHONPATH (a list of directory names, with the same syntax as the shell variable PATH). The installation-dependent default. #需要特别注意的是: Our custom module names should not be the same as the system's built-in modules. Although it is said every time, there will still be people who make mistakes. #在初始化后, the Python program can modify the Sys.path, and the path to the previous precedence over the standard library is loaded. 1 >>> Import sys2 >>> sys.path.append ('/a/b/c/d ') 3 >>> sys.path.insert (0, '/x/y/z ') #排在前的目录, priority to be searched note: Search by Sys.path in the order from left to right, the first priority is found, Sys.path may also contain. zip archive files and. Egg files, Python will take the. zip archive as a directory to deal with, # First make archive: Zip module.zip foo.py bar.py import syssys.path.append (' Module.zip ') import foo,bar# You can also use the specific location of the directory structure in the zip sys.path.append (' Module.zip/lib/python ') #windows下的路径不加r开头, syntax error Sys.path.insert (0,R ' C:\Users\ Administrator\pycharmprojects\a ') #至于. Egg files are created by SetuptoolsPackage, which is a common format used by third-party Python libraries and extensions,. Egg files are really just. zip files that add additional metadata (such as version numbers, dependencies, and so on). #需要强调的一点是: You can import only. py,.pyc files from a. zip file. Shared libraries and extension blocks written using C cannot be loaded directly from the. zip file (at this point the packaging system such as setuptools can sometimes provide a workaround), and loading files from. zip does not create. pyc or. pyo files, so be sure to create them beforehand to avoid loading modules that are degraded by performance.
Seven compiling Python files (learn)

To increase the speed of loading modules, emphasis is placed on emphasizing that loading speed is not the speed of operation. The Python interpreter caches the compiled version of each module in the __pycache__ directory, in the format: MODULE.VERSION.PYC. The version number of Python is usually included. For example, under the CPython3.3 version, the spam.py module is cached as __PYCACHE__/SPAM.CPYTHON-33.PYC. This naming convention guarantees a multi-version coexistence of compiled results.

Python checks that the modification time of the source file is compared to the compiled version and needs to be recompiled if it expires. This is a completely automated process. And the compiled module is platform independent, so the same library can be shared between different architectures of the system, that is, PYc makes a cross-platform bytecode, similar to Java fire. NET, is executed by Python virtual machine, but the content of PYC is related to Python version, Different versions of the compiled PYC file, 2.5 compiled PYc file can not be executed to 3.5, and PYc file is able to decompile, so it appears only to increase the load speed of the module, not to encrypt

#python解释器在以下两种情况下不检测缓存 # # If the module is imported directly from the command line, this way, each import is recompiled and the compiled results are not stored (this should be the case with previous versions of python3.3)    python-m Spam.py#2 If the source file does not exist, then the cached results will not be used, if you want to use the compiled results without the source file, then the compiled result must be in the source directory sh-3.2# ls__pycache__ spam.pysh-3.2# RM-RF spam.py sh-3.2# mv __pycache__/spam.cpython-36.pyc./spam.pycsh-3.2# python3 spam.pyc spam # Tip: 1. The module name is case-sensitive, foo.py and foo.py represent two modules 2. You can use the-O or-oo to convert Python commands to reduce the size of the compilation module    -o conversion will help you remove the Assert statement    - OO conversion will help you get rid of ASSERT statements and __doc__ document strings    because some programs may depend on an Assert statement or a document string, you should    use these options in case you need to confirm them. 3. Reading instructions from a. pyc file at a speed is no faster than reading instructions from a. py file, and only when the module is loaded, the. pyc file is faster. 4. Only the import statement is used to automatically compile the file into a. pyc file, and specifying the run script in the command line or standard input does not generate such a file, so we can make Create a. pyc file module for all modules in a directory with the Compieall module you can compile the Python source as a script (using python-m compileall)  python-m Compileall/module_ Directory recursively compiles if you use Python-o-M compileall/module_directory-l only a layer  of command line using the compile () function, automatically use Python-o-M compileall< c7/> See: Https://docs.python.org/3/library/compileall.html#module-compileall
Eight Package Introduction
1. What is a package?
#官网解释Packages is a way of structuring Python's module namespace by using "dotted module names" package is an organization of Python module names by using '. Module name ' Space in a way. #具体的: The package is a folder containing __init__.py files, so in fact we create the package is to use folders to organize files/modules # need to emphasize is: 1. In the Python3, even if there is no __init__.py file under the package, import package will still not error, and in Python2, the package must have the file, or import package error 2. The purpose of creating the package is not to run, but to be imported to use, remember that the package is just a form of the module, the essence of the package is a module
2, why to use the package
The essence of a package is a folder, then the only function of the folder is to organize the file as more and more features, we can not put all the functions in a file, so we use the module to organize functions, and as the module more and more, we need to use a folder to organize the module files, To improve the structure and maintainability of the program.
3. Precautions
#1. Import statements about package related are also divided into import and from ... import ... Either way, regardless of location, you must follow a principle when importing: any point on the import, the left side must be a package, otherwise illegal. Can carry a series of points, such as Item.subitem.subsubitem, but all must follow this principle. But for import, there is no such restriction when it is used, and the left side of the point can be a package, a module, a function, a class (both of which can call their own properties in a point-and-click manner). When importing a file #2, import, the name of the generated namespace from the file, import package, the name of the resulting namespace is also derived from the file, that is, the __init__.py under the package, the import package is the essence of the import of the file # #, package A and package B under the same name module will not conflict, such as A.A and B.A from two namespaces
Use of nine packs

1. Model Documents

glance/                   #Top-level package├──__init__.py      #Initialize The Glance package├──api                  #Subpackage for api│   ├──__init__.py│   ├──policy.py│   └──versions.py├──cmd                #Subpackage for cmd│   ├──__init__.py│   └── Manage.py└──db                  #Subpackage for db    ├──__init__.py    └──models.py
#文件内容 #policy.pydef Get ():    print (' from policy.py ') #versions. Pydef create_resource (conf):    print (' From version.py: ', conf) #manage. Pydef Main ():    print (' from manage.py ') #models. Pydef register_models (engine):    Print (' From models.py: ', Engine) package contains the contents of the file
Execute file and model file in sibling directory
2. Import of the use of the package
1 Import glance.db.models2 glance.db.models.register_models (' MySQL ')
Importing package names individually does not import all of the contained sub-modules in the package, such as
#在与glance同级的test. PY Import glanceglance.cmd.manage.main () ' Execution result: attributeerror:module ' glance ' has no attribute ' CMD ""
Workaround:
1 #glance/__init__.py2 from. Import cmd3 4 #glance/cmd/__init__.py5 from. Import Manage

Perform:
1 #在于glance同级的test. py 2 Import glance3 glance.cmd.manage.main ()

3, the use of the package from ... import ...

It is important to note that the From Post import module must be clear one cannot take a point, otherwise there will be a syntax error, such as: From a import B.C is the error syntax

  

1 from glance.db import models2 models.register_models (' MySQL ') 3 4 from glance.db.models import REGISTER_MODELS5 Register _models (' MySQL ')

4. From GLANCE.API Import *

When we talk about modules, we've talked about importing all from a module, where we're studying importing all * from a package.

Here is to import all from the package API, in fact, the statement will only import the package API under the __init__.py file defined in the name, we can define the __all___ in this file:

1 #在__init__. PY Definition 2 x=103 4 def func (): 5     print (' from api.__init.py ') 6 7 __all__=[' x ', ' func ', ' policy ']

At this point we are in the glance of the files in the same class to execute from GLANCE.API import * To import the contents of the __all__ (versions still cannot import).

5. Absolute import and relative import

Our top package glance is for others to use, and then within the glance package will also have each other to import each other needs, this time there are absolute import and relative import two ways:

Absolute import: Starting with glance

Relative import: With. Or. (can only be used in one package and not in different directories)

For example: We want to import glance/cmd/manage.py in glance/api/version.py

1 in Glance/api/version.py2 3 #绝对导入4 from glance.cmd import Manage5 manage.main () 6 7 #相对导入8 from: CMD import manage9 manage.main ()
Test Result: note must be tested in glance peer files
1 from GLANCE.API import versions

6, the package and the modules contained in the package are used to be imported, but not directly executed. And the environment variables are based on the execution file.

For example, we want to import glance/api/policy.py in the glance/api/versions.py, some students a smoke these two modules are in the same directory, very happy to do, it directly to do

1 #在version. PY 2 3 Import policy4 Policy.get ()

Yes, we run version.py alone is a bit of a problem, the path to run the version.py search is starting from the current path, so when importing policy can be found in the current directory

But you want to ah, the module in your sub-package version.py is likely to be imported by a glance package of the same level of other files, such as we are in glance peer under a test.py file import version.py, as follows

1 from GLANCE.API import versions 2  3 "4 execution Result: 5 importerror:no module named ' Policy ' 6" ' 7  8 "' 9 Analysis: 10 at this time We import versions in versions.py to execute one import policy need to find from Sys.path that is, from the current directory to find policy.py,12 this must not be found in the 13 "
# Time and DateTime module

In Python, there are usually several ways to represent time:

    • Timestamp (timestamp): Typically, a timestamp represents an offset that is calculated in seconds, starting January 1, 1970 00:00:00. We run "type (Time.time ())" and return the float type.
    • Formatted time string (format string)
    • Structured time (Struct_time): Struct_time A total of 9 elements in total nine elements: (year, month, day, hour, minute, second, week of the year, Day of the year, summer Time)
    • 1 Import time2 #--------------------------We start with the current time, let everyone quickly understand three forms of time 3 print (Time.time ()) # Timestamp: 1487130156.4195274 Print (Time.strftime ("%y-%m-%d%x")) #格式化的时间字符串: ' 2017-02-15 11:40:53 ' 5 6 print (Time.localtime ()) #本地时区的struct_time7 Print (Time.gmtime ())    #UTC时区的struct_time

Format the time format of a string

%a Locale ' s abbreviated weekday name.     %A Locale ' s full weekday name.     %b Locale ' s abbreviated month name.     %B Locale ' s full month name.     %c Locale ' s appropriate date and time representation.     %d day of the month as a decimal number [01,31].     %H Hour (24-hour clock) as a decimal number [00,23].    %I     Hour (12-hour clock) as a decimal number [01,12].     %j Day of the year as a decimal number [001,366].     %m Month as a decimal number [01,12].     %M Minute as a decimal number [00,59].    %p Locale ' s equivalent of either AM or PM.    (1)%s Second as a decimal number [00,61]. (2)%u Week number of the year (Sunday as the first day of the Week) as a decimal number [00,53].    A New year preceding the first Sunday is considered to is in week 0.     (3)%w Weekday as a decimal number [0 (Sunday), 6]. %W Week Number of the year (Monday as the first day of the Week) as a decimal number [00,53]. All days in a newYear preceding the first Monday is considered to is in week 0.     (3)%x Locale ' s appropriate date representation.     %x Locale ' s appropriate time representation.     %y year without century as a decimal number [00,99].     %Y year with century as a decimal number. %z time zone offset indicating a positive or negative time difference from utc/gmt of the form +hhmm or-hhmm, where H     Represents decimal hour digits and M represents decimal minute digits [-23:59, +23:59].     %Z Time zone name (no characters if no time zone exists). Percent A literal '% ' character.

1 #--------------------------Press Figure 1 Convert time 2 # localtime ([secs]) 3 # Converts a timestamp to the struct_time of the current time zone. The secs parameter is not provided, whichever is the current time. 4 Time.localtime () 5 time.localtime (1473525444.037215) 6  7 # gmtime ([secs]) and localtime () method similar to Gmtime () The Struct_time method is to convert a timestamp to the UTC time zone (0 o'clock Zone). 8  9 # mktime (t): Converts a struct_time to a timestamp. Print (Time.mktime (Time.localtime ())) #1473525749.011 # strftime (format[, T]): Put a tuple representing time or struct_ Time, such as returned by Time.localtime () and # Time.gmtime (), is converted to a formatted date string. If T is not specified, the Time.localtime () is passed in. If any of the 15 # elements in the tuple are out of bounds, the ValueError error will be thrown. Print (Time.strftime ("%y-%m-%d%x", Time.localtime ())) #2016 -09-11 00:49:5617 (time.strptime, format]) 19 # Converts a formatted time string to Struct_time. In fact it is inverse operation with strftime (). Print (Time.strptime (' 2011-05-05 16:37:06 ', '%y-%m-%d%x ')) #time. Struct_time (tm_year=2011, tm_mon=5, Tm_mday=5, Tm_hour=16, tm_min=37, tm_sec=6,22 #  tm_wday=3, tm_yday=125, tm_isdst=-1) #在这个函数中, format defaults to: "%a%b%d%h:%m:%s%Y".

1 #--------------------------by Figure 2 conversion Time 2 # asctime ([t]): A tuple or struct_time representing time is expressed in this form: ' Sun June 20 23:21:05 1993 '. 3 # If there are no arguments, the time.localtime () will be passed in as a parameter. 4 print (Time.asctime ()) #Sun Sep 00:43:43 20165 6 # CTime ([secs]): Converts a timestamp (floating point number in seconds) to the form of Time.asctime (). If the parameter is not given or is 7 # None, the default Time.time () is the parameter. Its function is equivalent to Time.asctime (time.localtime (secs)). 8 Print (Time.ctime ())  # Sun Sep 00:46:38 20169 Print (Time.ctime (Time.time ()))  # Sun Sep 11 00:46:38 2016
1 #--------------------------Other usage 2 # sleep (secs) 3 # thread postpones the specified time to run, in seconds.
#时间加减import datetime# Print (Datetime.datetime.now ()) #返回 2016-08-19 12:47:03.941925#print ( Datetime.date.fromtimestamp (Time.time ()))  # Timestamp goes directly to date format 2016-08-19# print (Datetime.datetime.now ()) # Print ( Datetime.datetime.now () + Datetime.timedelta (3)) #当前时间 + 3 days # print (Datetime.datetime.now () + Datetime.timedelta (-3)) # Current Time-3 days # print (Datetime.datetime.now () + Datetime.timedelta (hours=3)) #当前时间 + 3 hours # print (Datetime.datetime.now () + Datetime.timedelta (minutes=30)) #当前时间 +30 points # # # C_time  = Datetime.datetime.now () # Print (C_time.replace (minute=3, hour=2)) #时间替换
#random模块
1 Import Random 2   3 print (Random.random ()) # (0,1)----float    greater than 0 and less than 1 decimal 4   5 print (Random.randint (1,3))  #[1,3]    an integer greater than or equal to 1 and less than or equal to 3, 6   7 print (Random.randrange (1,3)) #[1,3)    is greater than or equal to 1 and is less than 3 between the integers 8   9 print ( Random.choice ([1, ' 1 ', [4,5]])) #1或者23或者 [4,5]10 one-  print (Random.sample ([13, ' + ', [4,5]],2) #列表元素任意2个组合12])  Print (Random.uniform (1,3)) #大于1小于3的小数, such as 1.927109612082716  item=[1,3,5,7,9]17 random.shuffle (item ) #打乱item的顺序, equivalent to "Shuffle" print (item)

Generate Random Verification code
Import Randomdef Make_code (n):    res= "for    I in range (n):        s1=chr (Random.randint (65,90))        S2=str ( Random.randint (0,9))        res+=random.choice ([s1,s2])    return Resprint (Make_code (9))
..................................
See http://www.cnblogs.com/linhaifeng/articles/6384466.html for more module introduction


Python Learning-Basic 4 modules and packages and common modules

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.