注释内容不会执行
用
#
放行首进行注释
# 这是一行注释
print('hello python') # 这是一行注释
用
'''
进行块注释,以'''
结尾来结束块注释
'''这是一个多行注释
这是一个多行注释
这是一个多行注释
'''
**代码审核:**一个团队彼此阅读对方的代码
PEP8(Python代码格式)
任何语言的程序员,编写出符合规范的代码,是开始程序生涯的第一步
运算符 | 描述 |
---|---|
+ - * / | 加 减 乘 除 |
// | 相除取整 |
% | 相除取余 |
** | 幂 |
# 生成一行分割线
print('-'*50)
一个程序要运行,要三个核心硬件缺一不可。分别是CPU,内存和硬盘。
程序要执行,首先要被加载到内存
which python # 确认解释器所在位置
ls -lh /usr/bin/python # 查看python文件大小(发现只是个软链接)
ls -lh /usr/bin/python2.7 # 查看具体文件大小,发现只有几M
使用软链接,是为了方便使用者不用记住使用的解释器是哪一个具体版本的
程序的作用就是处理数据(data)的
- 整型int
- 浮点型float
- 布尔型bool
数字0
被当成假- 复数型(complex)
主要用于科学计算
- 字符串str
- 列表list
- 元组turple
- 字典dict
进行算数运算。其中True是1,False是0。
input(‘用以提示用户输入的文字’) # 获取用户输入的数据,返回一个str
函数 | 说明 |
---|---|
int() | 转换为整数(向下取整) |
float() | 转换为浮点数 |
%
被称为格式化操作符,用于处理字符串中的格式。%
的字符串,被称为格式化字符串%
和不同字符连用,不同类型数据需要使用不同的格式化字符串格式化字符 | 含义 |
---|---|
%s | 字符串 |
%d | 有符号的十进制整数,%c6d表示输出的最小宽度,不足的地方使用c补齐(注意c可以为0或者为任意字符) |
%f | 浮点数。%.02f表示小数点后只显示两位 |
%% | 输出% |
‘格式化字符串’ % 变量
‘格式化字符串’ % (变量1, 变量2…)
# 下面的 1, female,171.00, 000001, 70% 用变量传入
‘身份证中1代表男,单词中female代表女,中国男性平均身高171.00,小明的学号为000001,班上70%是女生。’
a = 1
b = 'female'
c = 171
d = 1
e = 70
string = '身份证中%d代表男,单词中%s代表女,中国男性平均身高%.2f,小明的学号为%06d,班上%d%%是女生。'
print(string % (a, b, c, d, e))
标识符就是程序员定义的变量名、函数名
需要有见名知义的效果
关键字就是在python
内部已经使用的标识符
有特殊的功能和含义
开发者不允许定义和关键字相同名字的标识符
查看关键字
import keyword
print(keyword.kwlist)
命名规则是一种惯例,目的是为了增强代码识别和可读性
python
中的标识符是区分大小写的
翻译:(下面图片里是原文)
类型 |
---|
模块 |
包 |
类 |
例外 |
函数 |
全局/类常量 |
全局/类变量 |
实例变量 |
方法名称 |
功能/方法参数 |
局部变量 |
=
两边要使用空格'''这是一个游乐场的计价系统,其中:
6~12,打五折,12~16,打八折,大于16全票'''
if 年龄>16岁:
全票
elif 年龄>12岁:
八折
elif 年龄>6岁:
五折
else:
幼儿禁止入内
if 要判断的条件:
条件成立时,执行的代码块
elif 要判断的条件:
当上一个条件不成立,而该条件成立时,执行的代码块
elif 要判断的条件:
当上一个条件不成立,而该条件成立时,执行的代码块
else:
当所有条件都不成立时,执行的代码块
elif
和else
都必须和if
联合使用,不能单独使用运算符 | 说明 |
---|---|
== | 等于 |
!= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
运算符 | 说明 |
---|---|
and | 与 |
or | 或 |
not | 非 |
if ( A ) or ( B ) or ( C ) or ( D ) or ( E ):
# 可以在条件周围添加小括号,然后就可以分行了
if (( A)or ( B )
or ( C ) or ( D )
or ( E )):
# 分行了之后,最好在条件与子代码间增加一个空行,增加可读性。
# 条件判断最好再增加缩进,增加可读性(也就是相对于 if 8 缩进。相对于子句 4 缩进。)
# 火车站安检
if 有车票:
请接受安检
if 安检通过:
取候车吧
else:
请配合调查
else:
去买票吧
while 布尔值:
emsp;代码子块
# 方法一:用if语句跳出
count = 0
while 1:
print('重要的事情说三遍')
count += 1
if count == 3:
break
# 方法二:用计数器跳出
count = 3
while count:
print('重要的事情说三遍')
count -= 1
Ctrl C
退出(其实它是强制退出的热键)赋值运算符 | 说明 | 例子 |
---|---|---|
= | 最简单的赋值 | a = 1 |
+= | 加法赋值运算符 | a += b 等同于 a = a + b |
-= | 减法赋值运算符 | 同上 |
*= | 乘法赋值运算符 | 同上 |
/= | 乘法赋值运算符 | 同上 |
//= | 取整除赋值运算符 | 同上 |
%= | 取模赋值运算符 | 同上 |
**= | 幂赋值运算符 | 同上 |
break
退出循环体,不再执行后续循环的代码。continue
跳到循环的条件判断。# 打印1~3
for i in range(5):
print(i + 1)
if i == 2:
break
# 打印1、2、4、5
for i in range(5):
if i != 2:
print(i + 1)
continue
转义字符 | 作用 |
---|---|
\t | 横向制表符:在垂直方向上对齐 |
\符号 | 去除符号特殊意义 |
\n | 换行 |
\r | 回车 |
def 函数名():
'''函数注释'''
函数封装的代码
。。。。。。
def
是define
的缩写# 同文件中:
函数名()
# 不同文件中:
文件名.函数名()
return
关键字。def sum_two_num(num1,num2):
'''对两数字求和'''
return num1 + num2
# 调用函数,并用一个变量来接收它。注意,变量名和函数名可以重名。
sum_two_num = sum_two_num(99,2)
print('创造!%s' % sum_two_num)
def fun1():
print('这是第一个函数打印的结果')
def fun2():
print('这是第二个函数打印的结果')
fun1()
fun2()
**Tips:**工作中应对需求的变化,应该冷静思考,不要轻易修改之前已经完成的,能够正常执行的函数。
模块是Python程序架构的一个核心概念
import
关键字导入import 引入的模块名
引入的模块名.函数名1(传入的参数)
c
就是compiled
,意思是:编译过pyc
文件是由Python解释器将模块源码转化为字节码
,
分隔列表存储相同类型的数据(这是软规定,靠自觉遵守)
通过迭代遍历,取出数据,然后进行相同的操作
类别 | 关键字/函数/方法 | 说明 |
---|---|---|
增加 | 列表名.insert(索引,数据) | 在指定位置插入数据 |
列表名.append(数据) | 在末尾追加数据 | |
列表名.extend(列表名2) | 将列表2中的元素追加到列表 | |
修改 | 列表名[索引] = 元素 | 利用赋值语句修改 |
删除 | del 列表名[索引] | 删除指定索引的数据 |
列表名.remove[元素] | 删除第一个出现的指定数据 | |
列表名.pop | 删除末尾数据 | |
列表名.pop(索引) | 删除指定索引出的数据 | |
列表名.clear() | 清空列表 | |
统计 | len(列表名) | 列表长度 |
列表名.count(元素) | 指定元素在列表中的个数 | |
排序 | 列表名.sort() | 升序排序 |
列表名.sort(reverse=True) | 降序排序 | |
列表名.reverse() | 逆序,翻转 | |
查找 | 列表名.index(要查找的元素) | 查找索引 |
>>>list_test = ['第一个元素', '第二个元素', '第n个元素']
>>>list_test2 = ['第五个元素', '第六个元素']
>>># 取值
>>># 语法:列表名[索引] 会返回该索引位置的元素
>>>list_test[0]
'第一个元素'
>>># 取索引
>>># 语法:列表名.index(要查找的元素) 如果元素不在列表,会报错
>>>list_test.index('第一个元素')
0
>>># 修改
>>># 语法:使用赋值语句
>>>list_test[2] = '第三个数据'
>>>list_test
['第一个元素', '第二个元素', '第三个元素']
>>># 末尾增加
>>># 语法:列表名.append(追加的元素)
>>>list_test.append('第四个元素')
>>>list_test
['第一个元素', '第二个元素', '第三个元素','第四个元素']
>>># 中间插入
>>># 语法:列表名.insert(索引,新元素) # 这个索引就是这个新元素的索引
>>>list_test.insert(2,'在二三元素之间')
>>>list_test
['第一个元素','在二三元素之间', '第二个元素', '第三个元素','第四个元素']
>>># 追加一个列表的元素
>>># 语法:列表名.extend(序列) # 追加在列表尾
>>>list_test.extend(list_test2)
>>>list_test
['第一个元素','在二三元素之间', '第二个元素', '第三个元素','第四个元素','第五个元素', '第六个元素']
>>># 删除元素
>>># 语法:列表名.remove(元素) # 删除第一个出现的该元素
>>>list_test.remove('在二三元素之间')
>>>list_test
['第一个元素','第二个元素', '第三个元素','第四个元素','第五个元素', '第六个元素']
>>># pop是弹出的意思,使用pop会返回被删除的元素,直接使用pop相当于操作栈
>>># 语法:列表名.pop()
>>>list_test.pop()
'第六个元素'
>>>list_test
['第一个元素','第二个元素', '第三个元素','第四个元素','第五个元素']
>>># 清空列表
>>># 语法:列表名.clear()
>>>list_test.clear()
>>>list_test
[]
>>># 长度
>>># 语法:len(列表名)
>>>len(list_test)
0
>>># 元素个数
>>># 语法:list_test.count(列表名)
>>>list_test.count('第一个元素')
0
>>>list_test3 = ['a','c','b']
>>># 排序:升序,会改变原列表
>>># 语法:列表名.sort()
>>>list_test3.sort()
>>> list_test3
['a', 'b', 'c']
>>># 排序:降序,会改变原列表
>>># 语法:列表名.sort()
>>>list_test3.sort(reverse=True)
>>> list_test3
['c', 'b', 'a']
>>> list_test3.reverse()
>>> list_test3
['a', 'b', 'c']
>>># 使用关键字删除
>>># 语法:del 列表名[索引]
>>>list_test4 = ['第一个元素', '第二个元素', '第三个元素']
>>>del list_test4[2]
>>>list_test4
['第一个元素', '第二个元素']
关键字后面不需要使用小括号
函数名(参数)
函数需要死记硬背
对象.方法(参数)
方法不需要死记硬背
for 变量 in 集合:
# 变量是集合中的每个元素
...... # (循环体代码)
else:
# 若没有通过break退出循环,循环结束后,会执行的代码
%
后面跟着的(),就是一个元组# 定义一个空元组
empty_tuple = ()
# 定义只有一个元素的元组,要加逗号,否则()会被忽略
single_tuple = ('一个元素',)
dictionary
,有地方也叫散列表key
,换句话说,在字典中,键就是索引。物体
的相关信息# 取值
print(字典名[键])
# 增加/键值对,使用**赋值**语句
字典名[键] = 值
# 删除,使用pop
字典名.pop(键)
# 统计键值对数量
print(len(字典名))
# 更新字典(无则加冕,有则改过)
字典名.update(字典2名)
# 清空字典
字典名.clear()
string = "一串字符串字符串"
# 取出“字”
print(string[2])
# 长度
print(len(string))
# 计数(子字符串)
print(string.count("字符"))
# 取索引
print(string.index("字符"))
方法 | 说明 |
---|---|
string.isspace() | 如果 string 中只包含空白字符,则返回 True(空白字符,包括空格,换行,制表,回车等) |
string.isalnum() | 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True |
string.isalpha() | 如果 string 至少有一个字符并且所有字符都是字母则返回 True |
string.isdecimal() | 如果 string 只包含数字则返回 True,全角数字 |
string.isdigit() | 如果 string 只包含数字则返回 True,全角数字、⑴、\u00b2 |
string.isnumeric() | 如果 string 只包含数字则返回 True,全角数字,汉字数字 |
string.istitle() | 如果 string 是标题化的(每个单词的首字母大写)则返回 True |
string.islower() | 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True |
string.isupper() | 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True |
# 以下演示,皆采取最大范围:即穷举所有可以为True的结果。
A = " \t \n \r".isspace() # 如果 string 中只包含空白字符,则返回 True(空白字符,包括空格,换行,制表,回车等)
B = "Aa1".isalnum() # 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True
C = "Ab".isalpha() # 如果 string 至少有一个字符并且所有字符都是字母则返回 True
D = "123".isdecimal() # 如果 string 只包含数字则返回 True,全角数字
E = "123⑴²".isdigit() # 如果 string 只包含数字则返回 True,全角数字、⑴、\u00b2
F = "123⑴²一二三".isnumeric() # 如果 string 只包含数字则返回 True,全角数字,汉字数字
G = "Hello Python".istitle() # 如果 string 是标题化的(每个单词的首字母大写)则返回 True
H = "hello python".islower() # 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True
I = "HELLO PYTHON".isupper() # 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True
for run in [A,B,C,D,E,F,G,H,I]:
print(run) # 全是True
方法 | 说明 |
---|---|
string.startswith(str) | 检查字符串是否是以 str 开头,是则返回 True |
string.endswith(str) | 检查字符串是否是以 str 结束,是则返回 True |
string.find(str, start=0, end=len(string)) | 检测 str 是否包含在 string 中,如果 start 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回 -1 |
string.rfind(str, start=0, end=len(string)) | 类似于 find(),不过是从右边开始查找 |
string.index(str, start=0, end=len(string)) | 跟 find() 方法类似,不过如果 str 不在 string 会报错 |
string.rindex(str, start=0, end=len(string)) | 类似于 index(),不过是从右边开始 |
string.replace(old_str, new_str, num=string.count(old)) | 把 string 中的 old_str 替换成 new_str,如果 num 指定,则替换不超过 num 次 |
# 程序世界会分辨大小写,所以一定要注意
A = "Hello python".startswith("He") # 检查字符串是否是以 str 开头,是则返回 True
B = "Hello python".endswith("on") # 检查字符串是否是以 str 结束,是则返回 True
# 这里会报错takes no keyword arguments,意思是不支持关键字参数,所以当位参传就好了
# C = "Hello python".find("lo", start=0, end=len("Hello python")) # 检测 str 是否包含在 string 中,如果 start 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回 -1
C = "Hello python".find("lo", 0, len("Hello python")) # 检测 str 是否包含在 string 中,如果 start 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回 -1
D = "Hello python".rfind("lo", 0, len("Hello python")) # 类似于 find(),不过是从右边开始查找,索引是不会因为从哪边开始找而变化的。
E = "Hello python".index("lo", 0, len("Hello python")) # 跟 find() 方法类似,不过如果 str 不在 string 会报错
F = "Hello python".rindex("lo", 0, len("Hello python")) # 类似于 index(),不过是从右边开始
G = "Hello python".replace("python", "java", "Hello python".count("python")) # 把 string 中的 old_str 替换成 new_str,如果 num 指定,则替换不超过 num 次
for run in [A,B,C,D,E,F,G]:
print(run)
方法 | 说明 |
---|---|
string.capitalize() | 把字符串的第一个字符大写 |
string.title() | 把字符串的每个单词首字母大写 |
string.lower() | 转换 string 中所有大写字符为小写 |
string.upper() | 转换 string 中的小写字母为大写 |
string.swapcase() | 翻转 string 中的大小写 |
A = "hello python".capitalize() # 把字符串的第一个字符大写
B = "hello python".title() # 把字符串的每个单词首字母大写
C = "HellO PythoN".lower() # 转换 string 中所有大写字符为小写
D = "HellO PythoN".upper() # 转换 string 中的小写字母为大写
E = "HellO PythoN".swapcase() # 翻转 string 中的大小写
for run in [A,B,C,D,E]:
print(run)
# 返回的结果
"""Hello python
Hello Python
hello python
HELLO PYTHON
hELLo pYTHOn"""
方法 | 说明
string.ljust(width) |返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串
string.rjust(width) |返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串
string.center(width) |返回一个原字符串居中,并使用空格填充至长度 width 的新字符串
string = ["《蜀道难》",
"李白",
"噫吁嚱,",
"危乎高哉!",
"蜀道之难,",
"难于上青天!"]
for poem in string:
print("|%s|" % poem.center(10," ")) # 第一个参数是长度,第二个参数是填充用的字符串(默认用半角空格填充0
print("-"*50)
for poem in string:
print("|%s|" % poem.ljust(10," "))
print("-"*50)
for poem in string:
print("|%s|" % poem.rjust(10," "))
"""| 《蜀道难》 |
| 李白 |
| 噫吁嚱, |
| 危乎高哉! |
| 蜀道之难, |
| 难于上青天! |
--------------------------------------------------
|《蜀道难》 |
|李白 |
|噫吁嚱, |
|危乎高哉! |
|蜀道之难, |
|难于上青天! |
--------------------------------------------------
| 《蜀道难》|
| 李白|
| 噫吁嚱,|
| 危乎高哉!|
| 蜀道之难,|
| 难于上青天!|"""
方法 | 说明 |
---|---|
string.lstrip() | 截掉 string 左边(开始)的空白字符 |
string.rstrip() | 截掉 string 右边(末尾)的空白字符 |
string.strip() | 截掉 string 左右两边的空白字符 |
string = "\r\t\n hello python \r\t\n"
print(string.lstrip()) # 截掉 string 左边(开始)的空白字符
print(string.rstrip()) # 截掉 string 右边(末尾)的空白字符
print(string.strip()) # 截掉 string 左右两边的空白字符
""" thon
hello python
hello python"""
方法 | 说明 |
---|---|
string.partition(str) | 把字符串 string 分成一个 3 元素的元组 (str前面, str, str后面) |
string.rpartition(str) | 类似于 partition() 方法,不过是从右边开始查找 |
string.split(str="", num) | 以 str 为分隔符拆分 string,如果 num 有指定值,则仅分隔 num + 1 个子字符串,str 默认包含 ‘\r’, ‘\t’, ‘\n’ 和空格 |
string.splitlines() | 按照行(’\r’, ‘\n’, ‘\r\n’)分隔,返回一个包含各行作为元素的列表 |
string.join(seq) | 以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 |
A = "hello_world_python".partition("world") # 把字符串 string 分成一个 3 元素的元组 (str前面, str, str后面)
B = "hello_world_python".rpartition("_") # 类似于 partition() 方法,不过是从右边开始查找
C = "hello_world_python".split("_") # 以 str 为分隔符拆分 string(没有就使用所有空白字符分割),如果 num 有指定值,则仅分隔 num + 1 个子字符串,str 默认包含 ‘\r’, ‘\t’, ‘\n’ 和空格
D = "hello\nworld\rpython".splitlines() # 按照行(’\r’, ‘\n’, ‘\r\n’)分隔,返回一个包含各行作为元素的列表
E = "_".join(["hello","world","python"]) # 以 string 作为分隔符,将 seq(序列) 中所有的元素(的字符串表示)合并为一个新的字符串
for run in [A,B,C,D,E]:
print(run)
"""('hello_', 'world', '_python')
('hello_world', '_', 'python')
['hello', 'world', 'python']
['hello', 'world', 'python']
hello_world_python"""
序列[开始索引:结束索引:步长] # 取左不取右
索引可以倒序索引
隔一个,步长为2
seq[-1::-1] # 表示从最后一个开始,往回取
seq[::-1] # 也可以省略为这种形式
函数 | 说明 | 附注 |
---|---|---|
len(item) | 计算容器中的元素个数 | |
del(item) | 删除变量 | del 有两种方法 |
max(item) | 最大值 | 字典比较的是key |
min(item) | 最小值 | 字典比较的是key |
运算符 | 作用 | 支持的数据类型 |
---|---|---|
+ | 合并 | seq |
* | 重复 | seq |
in | 元素是否存在 | item |
not in | 元素是否不存在 | item |
> >= <= < == != |
元素比较 | seq |
python
中函数的参数传递 以及 返回值 都是靠 引用 传递的在python
中:
当给一个已定义的变量赋值时,本质上是修改了数据的引用。即改为对新赋值的数据引用。
- 数字类型
int
,bool
,float
,complex
,long(2,x)
- 字符串
str
- 元组
tuple
- 列表
list
- 字典
dict
a = ["唯一一个元素"]
print(id(a)) # 52136656
a.clear()
print(a,id(a)) # [] 52136656 没有变化,说明是改变数据,不是改变引用
a = []
print(a,id(a)) # [] 52136776 发生变化,说明此空列表非彼空列表。赋值语句会修改变量的引用
key
只能用不可变类型python
中内置一个hash()函数
- 接收一个不可变类型的数据作为参数
- 返回的结果是一个整数(特征码)
- 相同的内容得到相同的结果
- 不同的内容得到不同的结果
python
中,设置字典的键值对时,会首先对key
进行hash
。以保证字典中的数据有个更好的优化,以方便后续的CRUD在其他的开发语言中,大多不推荐使用全局变量==>可变范围太大,导致程序不好维护!
python
中,使用全局变量的情况比较常见,但是有一些特殊的要求。python
中,是不允许修改全局变量的值的
- 若在函数内定义同名变量,只会定义一个局部变量,与全局变量无关
- 函数会优先使用局部变量,若未找到,才会去找全局变量
global
关键字a = 1
def a_num():
global a # 声明修改全局变量
a = 2
def a_print():
print(a)
a_print() # 2
shebang(用来选择使用哪一个解释器) |
---|
import 模块 |
全局变量 |
函数定义 |
执行代码 |
g_
或gl_
,具体根据公司要求Refactor
,选择rename
,然后增加前缀,就可以了(快捷键Shift F6)(不会修改同名的局部变量)# 封包:将多个数据封装成一个元组。
A = 1,2,3
print(A) # (1,2,3)
# 解包:将一个元组中的数据分配给多个变量。
B, C, D = (1,2,3)
print(B) # 1
print(C) # 2
print(D) # 3
# 解包的同时封包
E, F, G = 4, 5, 6
print(E) # 4
print(F) # 5
print(G) # 6
# 解法一:封包解包(python特有解法)
a = 1
b = 2
b, a = a, b
# 解法二:利用数学逻辑(原理是和、乘可以携带多个数据,只要留有)
a = a + b
b = a - b
a = a - b
gl_num = 13
def fun1(num):
num = 0
print(num)
fun1(gl_num) # 0
# 原因是:函数的num 引用外部变量gl_num 的数据, 当执行到函数内部,发现赋值语句,于是更改了num的引用,num不再引用gl_num 了。
gl_list = [1, 3, 5]
def fun1(num_list):
num_list.append(7)
fun1(gl_list)
print(gl_list) # [1, 3, 5, 7],发现调用方法更改了可变数据类型
python
中,列表变量调用+=
本质上是在执行列表变量的extend
方法,不会修改变量的引用(面试题)gl_num = 1
gl_list = [1, 3, 5]
def fun(lo_num, lo_list):
lo_num += 99
# 列表变量作 += 本质上是在调用列表的 extend 方法
# 如果是使用 list1 = list1 + list2, 就是赋值语句的意思,不会改变外部变量
lo_list += [7, 9]
fun(gl_num, gl_list)
print(gl_num,gl_list,sep=" ") # 1 [1, 3, 5, 7, 9]
# 原因是,+=对num来说是赋值语句,对list来说是调用方法
**比如:**列表的 sort() 方法,默认使用升序排序。
def print_role(name, gender= "男"):
print("【姓名】%s 【性别】%s" % (name, gender))
print_role("小明")
print_role("小红","女")
print_role("小光", gender="女")
"""【姓名】小明 【性别】男
【姓名】小红 【性别】女
【姓名】小光 【性别】女"""
python
中有两种多值参数
- 参数名前加
*
可以接收元组- 参数名前加
**
可以接收字典
*args
==>存放元组参数**kwargs
==>存放字典参数
args 是 arguments 的缩写,是变量的意思
def fun1(arg1, *args, **kwargs):
print(arg1,args,kwargs,sep=" ")
print("-"*50)
# 注意 字典的键 不能有引号包裹,相当于关键字参数的意味。
fun1(1,2,3,4,5,王二= 18, 张三= 20, 李四= 21)
# 以上代码等同于下面这些代码(对比一下,体会个中感觉,会发现上面简洁多了):
def fun2(arg1, args, kwargs):
print(arg1,args,kwargs,sep=" ")
print("-"*50)
fun2(1, (2, 3, 4, 5), {"王二":18, "张三":20, "李四": 21})
def sum_num(*args):
sum = 0
for num in args:
sum += num
print(sum)
sum_num(250,38,2) # 290
-在元组变量前,增加
*
-在字典变量前,增加**
def fun(arg1, *args, **kwargs): # 注意形参和实参,都需要用 *
print(arg1,args,kwargs,sep=" ")
print("-"*50)
tuple1 = (2, 3, 4, 5)
dict1 = {"王二":18, "张三":20, "李四": 21}
fun(1, *tuple1, **dict1)
random.randint(a,b) # 生成[a,b]的所有整数
# 引入random模块
import random
user_choice = int(input('请输入您的选择(石头0,剪刀1,布2)'))
computer_choice_index = random.randint(0,2) # 在交互式解释器中,发现这是个int类型的
# 利用列表来取出电脑的选择
bunch_list = ['石头','剪刀','布']
computer_choice = bunch_list[computer_choice_index]
print('电脑输入的是%s'%computer_choice)
# 利用列表的索引来输出结果,利用负数可以从后往前索引
win_or_fail_list = ['打了个平局','你输了!','你赢了!']
print(win_or_fail_list[user_choice - computer_choice_index])
num = int(input('请输入一个数字'))
sum = 1
while num - 1:
sum *= num
num -= 1
print(sum)
for i in range(9):
i += 1
for j in range(i):
j += 1
print('%d * %d = %d' % (j, i, j * i),end='\t')
print()
user_list = [
{"name":"小明",
"height":"188"},
{"name":"小红",
"height":"165"}
]
name = input("请输入希望查找的用户")
for user in user_list:
if user["name"] == name:
print("%s的身高是:%s" % (user["name"],user["height"]))
break
else:
print("没有找到")
def factorial(num, f=1):
f *= num
if num == 1:
print(f)
return
factorial(num - 1, f)
factorial(10)
def factorial(num):
if num == 1:
return 1
# 假设factorial可以处理num - 1的阶乘
f = factorial(num - 1)
# f因为是num - 1的阶乘,所以在乘上num时,就变成了num的阶乘(像不像归纳总结?)
return num * f
print(factorial(10))