前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python3 | 练气期,入门精简基础语法!

Python3 | 练气期,入门精简基础语法!

作者头像
全栈工程师修炼指南
发布2024-07-16 15:59:58
1040
发布2024-07-16 15:59:58
举报
文章被收录于专栏:全栈工程师修炼之路

0x00 前言简述

前面我们已经尝试了Python程序的几种运行方式,并运行了第一个Hello World的Python程序,并且列举了 Python2 与 Python3 的部分差异!

虽然 Python 语言与 Perl,C 和 Java 等语言有许多相似之处,但是还是存在一些差异,本章我们快速过一遍Python编程中的基础性语法。

温馨提示:作者后续实践主要在 Ubuntu 24.04 TLS + Python 3.12 + Jupyter Notebook 环境中运行,若要配置为作者的学习环境,可参考《#AIGC学习之路》专栏中的流程。

温馨提示:若各位看友在其他平台看到此篇文章,一定要关注公众号【全栈工程师修炼指南】进行持续学习!我们一同学习,一起进步,关注后回复【加群】哟!

0x01 基础语法

1.标识符

在 Python3 里,标识符(用于变量、函数、类名等)由字母(大小写敏感)、数字(不能作首位)、下划线(_)组成,并且可使用中文作为变量名称使用。

以单、双下划线开头的标识符是有特殊意义的,通常用于命名约定或者语言内部使用,例如:

  • _ : 以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入。
  • __ : 以双下划线开头的 __foo 代表类的私有成员,以双下划线开头和结尾的 __foo__ , 代表 Python 里特殊方法专用的标识,如 __init__() 代表类的构造函数。
代码语言:javascript
复制
# 在类的定义中用于初始化对象
class MyClass:
    def __init__(self, x):
        self.x = x
 
    # 私有方法,建议不要直接调用
    def _internal_method(self):
        pass  
obj = MyClass(10)

除此之外,特殊的变量还有__name__ __doc__

  • 例如,__name__ 用于表示当前模块的名称。在一个Python脚本中,可以通过它来判断脚本是作为主程序运行还是被导入为模块。
代码语言:javascript
复制
if __name__ == "__main__":
    print("如果这个脚本作为主程序运行,执行以下代码.")
else:
    print("如果这个脚本被导入为模块,执行以下代码.")
  • 例如,__doc__ ,用于存储模块、类或函数的文档字符串(docstring)。
代码语言:javascript
复制
def my_function():
    """我是函数的说明注释!"""
    pass
print(my_function.__doc__)

2.注释符

在Python中可采用 # ''' """ 来注释代码以及函数帮助说明,注意除了#其他都是成对使用,并且在输出函数中也能进行注释输出,例如:

代码语言:javascript
复制
# 我是注释,以下实例我们可以输出函数的帮助注释:
def demo():
    '''这是函数帮助说明注释
       demo 函数式一个测试函数
    '''
    pass

'''
这是多行注释,使用单引号。
这是多行注释,使用单引号。
这是多行注释,使用单引号。
'''

"""
这是多行注释,使用双引号。
这是多行注释,使用双引号。
这是多行注释,使用双引号。
"""

# 我是单注释,输出结果为:这是文档字符串
print(demo.__doc__) 

# 我是单注释,还可调用 python 的 help() 函数可以打印输出一个函数的文档字符串:
help(demo)

weiyigeek.top-注释符图

3.解释器与编码

默认情况下,在 Windows 下可以不写第一行注释 #!/usr/bin/python3 ,但是在 Linux 、Unix 系统中建议,在第一行注释中指向 python 的路径,告诉操作系统执行这个脚本的时候,调用 /usr/bin 下的 python 解释器。

默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串,此外也可以为源码文件指定不同的编码,只需要在文件开头加入 # -*- coding: gbk-2312 -*- 或者 # coding=gbk-2312(注意等号两边无空格),以及将文件的存储的格式设置为 gbk-2312。

例如,在 Ubuntu 24.04 TLS 中指定解释器路径及其编码格式

代码语言:javascript
复制
# 推荐 先在 env(环境变量)设置里查找 python 的安装路径,再调用对应路径下的解释器程序完成操作。
#!/usr/bin/env python3

# 推荐 指明源码文件的字符编码位为 utf-8
# -*- coding: utf-8 -*-

4.行与缩进

Python 编程语言不再像其他语言一样使用大括号{}来控制类,函数以及其他逻辑判断,而是以缩进的方式;

因此,在 Python 的代码块中必须使用相同数目的行首缩进空格数,可使用 单个制表符(Tab)两个空格(Space)四个空格 进行缩进, 切记不能混用;

代码语言:javascript
复制
def a()
    '''我使用了两个tab键(四个空格)'''
    pass

温馨提示:由于不同的IDE编辑器其Tab键的空格数量可能不一致,作者建议是统一设置一个Tab键等于两个空格。

5.空行分隔

描述:空行与代码缩进不同,空行并不是Python语法的一部分(记住:空行是程序代码的一部分),书写时不插入空行,Python解释器运行也不会出错;但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构,不过通常大厂都有自己的开发规范,用于提高协同开发效率,及其代码安全;

  • 函数或类的方法之间用空行分隔,表示一段新的代码的开始。
  • 类和入口函数之间也用一行空行分隔,表示一个函数入口(类初始化)的开始。

6.同行多行

通常是一行写一条语句,但是早某些场景中可能需要在同行有多条语句,此时语句之间可使用分号;分割,除此之外,也可以使用反斜杠\来实现多行语句

例如,同一行中使用多条语句以及多行语句于示例。

代码语言:javascript
复制
#!/usr/bin/python3
# -*- coding:UTF-8 -*-
# 多行语句示例
one = 1
two = 2
three = 3
add = one +\
    two +\
    three

# 同一行中使用多条语句示例
print("add = ",end="");print(add);

输出结果:

代码语言:javascript
复制
add = 6

但是在[], {}, 或 ()中的多行语句直接使用,来分割例如:

代码语言:javascript
复制
# 列表(链表数组)
programming_capabilities = ['Python', 'Java', 'Go', 'C++', 'C']

7.变量定义

在 Python 中的变量不需要声明,但每个变量在使用前都必须赋值,赋值以后该变量才会被创建;

Python 是弱类型语言(类型属于对象),变量是没有类型的,变量仅仅是一个对象的引用(一个指针),且一个变量可以通过赋值指向不同类型的对象,比如:

代码语言:javascript
复制
# [1,2,3] 是 List 类型,
a=[1,2,3]

# "全栈工程师修炼指南" 是 String 类型
a="全栈工程师修炼指南"

#变量 a 是没有类型,是一个对象的引用(一个指针),可以是指向 List 类型对象,也可以是指向 String 类型对象。

在 python 中,numbers strings, tuples(元组)不可更改的对象,而 list(列表), dict(字典) , set(集合)则是 可以修改的对象(后面会进行解释,大致了解即可)。

  • 不可变类型:变量赋值 immutable=5 后再赋值 immutable=10,这里实际是新生成一个 int 值对象 10,再让 immutable 指向它,而 5 被丢弃,不是改变此变量的值,相当于新生成了immutable。
  • 可变类型:变量赋值 changeable=[1,2,3,4] 后再赋值 changeable[2]=5 则是将 list changeable 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。

示例,

代码语言:javascript
复制
#!/usr/bin/python3
# -*- coding:UTF-8 -*-
# 功能:不可变类型变量的定义
int1 = 23
float1 = 100.0
string = "WeiyiGeek" 
print("姓名:",string,"年龄:",int1, "分数:", float1,end="\n") 

a = b = c = 1   # 创建一个整型对象,值为 1,从后向前赋值,三个变量被赋予相同的数值
print(a,b,c,end="\n") 

# 两个整型对象 1 和 2 的分配给变量 a 和 b,字符串对象 "runoob" 分配给变量 c。
a,b,c = 1, 2, "WeiyiGeek" 
print(a,b,c,end=" ")

# 这里会说 a ,b not define (未定义)
del a,b
print(a,b,c,end=" ")  

weiyigeek.Python变量赋值

8.模块导入

在 python 用 import 或者 from...import 来导入相应的模块,或者使用import....as..aliasName将模块换个别名。

例如,以 time 模块为例:

  • 将模块导入: import time ,在引用时格式为:time.sleep(1)
  • 从模块中导入某个函数: from time import sleep ,在引用时格式为:sleep(1)
  • 从模块中导入多个函数: from modulename import fun1, fun2 ,在引用时格式为:fun1(1)、fun2(1)
  • 将模块中的全部函数导入: from time import * ,在引用时格式为:sleep(1)
  • 将模块换个别名:import time as abc,在引用时格式为:abc.sleep(1)

例如,导入 sys 模块,输出命令行参数及其命令行路径。

代码语言:javascript
复制
#!/usr/bin/python3
# -*- coding:UTF-8 -*-
import sys
print('================Python import mode==========================')
print ('命令行参数为:')
for i in sys.argv:
    print (i)
print ('\n python 路径为',sys.path)

9.关键字、内置标识符

在Python的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字(保留字),以及使用dir(__builtins__)查看内置标识符,在编程中我们不能把它们用作任何自定义标识符名称。

示例,打印关键字及其内置函数。

代码语言:javascript
复制
#!/usr/bin/python3
# -*- coding:UTF-8 -*-
# 关键字
import keyword
key=keyword.kwlist
print("保留关键字: ",key)
print("保留关键字数量:",len(key))
# 保留关键字:  ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
# 保留关键字数量: 35

# 内置标识符
func=dir(__builtins__)
print("内置标识符: ",func)
print("内置标识符数量:",len(func))
内置标识符:  ['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BaseExceptionGroup', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EncodingWarning', 'EnvironmentError', 'Exception', 'ExceptionGroup', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError', '__IPYTHON__', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'aiter', 'all', 'anext', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'display', 'divmod', 'enumerate', 'eval', 'exec', 'execfile', 'filter', 'float', 'format', 'frozenset', 'get_ipython', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'range', 'repr', 'reversed', 'round', 'runfile', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
内置标识符数量: 160

weiyigeek.top-关键字、内置标识符图

10.输入输出

描述:在 Python 编程中除了字符串处理外,最常用的就是输入(input 函数)、输出(print 函数)、格式化(format 函数)或者sys.stdout.write了, 下面我们大致学习实践一下。

  • 在 Python 中使用 print() 函数实现格式化输出类似于 C/C++ 的 printf 函数,方法是使用 % 操作符,它会将左边的字符串当做格式字符串,将右边的参数代入格式字符串:print("100 + 200 = %d" % 300), 若带入多个参数,则需要用() 包裹代入的多个参数,参数之间用逗号隔开,参数的顺序应该对应格式字符串中的顺序:print("%s %s" % ("world","hello")),print 函数格式字符串中,不同占位符的含义如下:
  • %s:作为字符串
  • %d:作为有符号十进制整数
  • %u:作为无符号十进制整数
  • %o:作为无符号八进制整数
  • %x:作为无符号十六进制整数,a~f采用小写形式
  • %X:作为无符号十六进制整数,A~F采用大写形式
  • %f:作为浮点数
  • %e,%E:作为浮点数,使用科学计数法
  • %g,%G:作为浮点数,使用最低有效数位

格式化操作符辅助指令如下:

Python格式化操作符辅助指令

  • 在 Python 中,format() 函数是用于格式化字符串的强大工具。它允许您将各种值(如整数、浮点数、字符串等)插入到一个格式化的字符串中,从而生成最终的输出,而除了基本的插值之外,format() 方法还支持多种格式选项,如指定字段宽度、精度、对齐方式等。

但是从 Python 3.6 开始,引入了更简洁和直观的 f-string 语法 (推荐), 即在字符串前加上 f 或 F,并使用 {} 将表达式嵌入到字符串中,这使得字符串 格式化更为直观和易读。

示例1,格式化字符串输出

代码语言:javascript
复制
#!/usr/bin/python3
# coding=utf-8

# 格式化字符串
print("我叫 %s 今年 %d 岁 %#X  数值:%5.3f" % ('小明',10,255,12.85455))
print("\u6211\u662f\u6700\u559c\u7231\u0050\u0079\u0074\u0068\u006f\u006e") # unicode 输出

# 进制的转换
"%o" % 10    #'12'    || "%#o" % 10  #'0o12'
"%X" % 10    #'A'     || "%#X" % 10  #'0XA'
"%x" % 10    #'a'     ||  "%#x" % 10   #'0xa'

# 格式化浮点数
"%5.2f" %27.658     # '27.66'
"%5.2f" %27         # '27.00'
"%f" %27            # float类型,小数点后保留6位数 '27.000000'
"%e" % 10000000     # '1.000000e+07'
"%.2e" % 27.658     # '2.77e+01

"%g" % 28.444455     #智能选择 '28.4445'
"%g" % 28261465     #'2.82615e+07'

"%5d" %5       #'    5'
"%-5d" %5      #'5    ' - 用于左对其
"%+d" % 5      #'+5'  + 用于取正数和负数
"%+d" % -5    #'-5'

"%010d" % 5   #'0000000005'
"%-010d" % 5   #加个负号来个left对其,而这时0不会填充'5    
print('%s' % "I love you")           #格式化字符串 'I love you' (常规方式)

# 格式化定点数(%f),M.N(M表示最小长度,N表示小数点后的位数?) 推荐方法
'{0:1f}{1}'.format(27.586,"Gb")    # '27.586000Gb'
'{0:.1f}{1}'.format(27.586,"Gb")   # '27.6Gb'  保留小数点后一位数值
"%c %c %c"  %  (97,98,99)         #格式化字符Ascll码转换 'a b c'
'%d + %d = %d' % (4 ,5 ,4+5)   #格式化整数 '4 + 5 = 9'

示例2,使用 format 函数进行格式化字符串

代码语言:javascript
复制
>>> "{:+.2f} {:+.2f}".format(3.1415926,-1)  #带符号保留小数点后两位
'+3.14 -1.00'
>>> "{:.0f} {:.0f}".format(3.1415926,-1)  #不带小数提取
'3 -1'
>>> "{:0>2d}".format(3)  #补充左边以零补充
'03'
>>> "{:0<2d}".format(3)  #补充右边以零补充
'30'
>>> "{:,}".format(30000000)  #以逗号分割的数字格式
'30,000,000'
>>> "{:.2%}".format(0.2657)  #百分比格式
'26.57%'
>>> "{:.2e}".format(10000000000000)  #指数记发
'1.00e+13'
>>> "{:10d}".format(100)  #右对齐 10个单位的宽度
'       100'
>>> "{:<10d}".format(100) #左对齐
'100       '
>>> "{:^10d}".format(100) #中间对齐
'   100   

示例3,Python 3.6 及以上使用 f-string 进行格式化字符串更为直观和易读

代码语言:javascript
复制
#!/usr/bin/python3
# coding=utf-8
name = "WeiyiGeek"
age = 28
formatted_str = f"姓名:{name},年龄:{age}"
print(formatted_str)

执行结果: 姓名:WeiyiGeek,年龄:28

示例4,Python 中的常规输入输出函数。

代码语言:javascript
复制
#!/usr/bin/python3
# coding=utf-8

name=input("请输入你的姓名:")
age=input("请输入你的年龄:")
hobby=input("请输入你的爱好:")

print(f"你好,{name}!欢迎使用我们的程序。")
print("年龄:%d" % int(age))
print("爱好: %s" % hobby, end="__END__")  # 指定输出字符串的后缀。

# 使用 sys 模块
import sys; sys.stdout.write(name + '\n' + age +  '\n' + hobby)

weiyigeek.top-输入输出图

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈工程师修炼指南 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 前言简述
  • 0x01 基础语法
    • 1.标识符
      • 2.注释符
        • 3.解释器与编码
          • 4.行与缩进
            • 5.空行分隔
              • 6.同行多行
                • 7.变量定义
                  • 8.模块导入
                    • 9.关键字、内置标识符
                      • 10.输入输出
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档