笔记1

http://www.pythondoc.com/pythontutorial3/controlflow.html


  • 参数传递 Python中sys.argv的用法

调用解释器时,脚本名和附加参数传入一个名为 sys.argv 的字符串列表。你能够获取这个列表通过执行 import sys,列表的长度大于等于1;没有给定脚本和参数时,它至少也有一个元素:sys.argv[0] 此时为空字符串。脚本名指定为 '-' (表示标准输入)时, sys.argv[0] 被设定为 '-',使用 -c 指令 时,sys.argv[0] 被设定为 '-c'。使用 -m 模块 参数时,sys.argv[0] 被设定为指定模块的全名。-c 指令 或者 -m 模块 之后的参数不会被 Python 解释器的选项处理机制所截获,而是留在 sys.argv 中,供脚本命令操作。

*test.py*
import sys
print(sys.argv)
print(sys.argv[1] >>>python test.py -c -m
...['test.py','-c','-m']
...-c
  • 字符串替换

Python replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。

str.replace(old, new[, max])

  • old -- 将被替换的子字符串。
  • new -- 新字符串,用于替换old子字符串。
  • max -- 可选字符串, 替换不超过 max 次
a = 'hello world'
b = a.replace('world','python')
print(b) ...hello python
  • enumerate() 函数

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

enumerate(sequence, [start=0])

  • sequence -- 一个序列、迭代器或其他支持迭代对象。
  • start -- 下标起始位置。
a = ['abc','def','ghi']
b = list(enumerate(a))
print(b)
for i,j in enumerate(a):
print(i,j) ...[(0, 'abc'), (1, 'def'), (2, 'ghi')]
...0 abc
...1 def
...2 ghi

实际上enumerate就是个可迭代对象,可用以下方法实现:

def enumerate(sequence, start=0):
n = start
for elem in sequence:
yield n, elem
n += 1
  • 循环中的 else 子句

循环可以有一个 else 子句;它在循环迭代完整个列表(对于 for )或执行条件为 false (对于 while )时执行,但循环被 break 中止的情况下不会执行。以下搜索素数的示例程序演示了这个子句:

for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print(n, 'equals', x, '*', n//x)
break
else:
print(n, 'is a prime number') ...
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3
  • 文档字符串

函数体的第一行语句可以是可选的字符串文本,这个字符串是函数的文档字符串,或者称为 docstring。(更多关于 docstrings 的信息请参考 文档字符串) 有些工具通过 docstrings 自动生成在线的或可打印的文档,或者让用户通过代码交互浏览;在你的代码中包含 docstrings 是一个好的实践,让它成为习惯吧。

def test():
'''
doc test
'''
print('test') print(test.__doc__) ... doc test
  • 函数变量

函数 调用 会为函数局部变量生成一个新的符号表。确切的说,所有函数中的变量赋值都是将值存储在局部符号表。变量引用首先在局部符号表中查找,然后是包含函数的局部符号表,然后是全局符号表,最后是内置名字表。因此,全局变量不能在函数中直接赋值(除非用 global 语句命名),尽管他们可以被引用。

函数引用的实际参数在函数调用时引入局部符号表,因此,实参总是 传值调用 (这里的 值 总是一个对象 引用 ,而不是该对象的值)。 一个函数被另一个函数调用时,一个新的局部符号表在调用过程中被创建。

一个函数定义会在当前符号表内引入函数名。函数名指代的值(即函数体)有一个被 Python 解释器认定为 用户自定义函数 的类型。 这个值可以赋予其他的名字(即变量名),然后它也可以被当做函数使用。这可以作为通用的重命名机制:

def test():
print('test') >>>test
...<function test at 10042ed0>
>>>f = test
>>>f
...test ----------
a = 100
def test(n):
a = 200
print('test%d%d'%(n,a))
test(3)
print (a) ...test3200
...100 ----------
a = 100
def test(n):
global a
a = 200
print('test%d%d'%(n,a))
test(3)
print (a) ...test3200
...200
  • 函数的位置参数与关键字参数

  • 位置参数:调用函数时根据函数定义的参数位置来传递参数

def test(a,b=100,c='haha'):
print(a,b,c)
test(2)# positional argument ...2 100 haha
  • 关键字参数:用于函数调用,通过“键-值”形式加以指定。可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求,在函数调用中,关键字的参数必须跟随在位置参数的后面。传递的所有关键字参数必须与函数接受的某个参数相匹配,它们的顺序并不重要。这也包括非可选参数。任何参数都不可以多次赋值。
正确的调用
test(2,b=50) # 1 positional, 1 keyword
test(a=5,c='hahaha')# 2 keyword arguments 错误的调用
test(b=50)
test(c='hahha',5)
test(5,a=10)
  • 可变参数

引入一个形如**name 的参数时,它接收一个字典,该字典包含了所有未出现在形式参数列表中的关键字参数。这里可能还会组合使用一个形如 *name 的形式参数,它接收一个元组,包含了所有没有出现在形式参数列表中的参数值( *name 必须在 **name 之前出现)。

def test(a,*b,**c):
print(a)
print(b)
print(c)
test('a','dsad','dasdad',k='weqeq',y='werrq') ...a
...('dsad', 'dasdad')
...{'k': 'weqeq', 'y': 'werrq'}
  • 参数列表的分拆

另有一种相反的情况: 当你要传递的参数已经是一个列表,但要调用的函数却接受分开一个个的参数值。这时候你要把已有的列表拆开来。例如内建函数 range() 需要要独立的 start,stop 参数。你可以在调用函数时加一个 * 操作符来自动把参数列表拆开:

a = [1,10]
b = range(*a)
print(list(b)) ...[1, 2, 3, 4, 5, 6, 7, 8, 9]

以同样的方式,可以使用 ** 操作符分拆关键字参数为字典:

tmp = {'a':10,'b':20}
def test(a,b):
print(a,b)
test(**tmp) ...10 20
  • 匿名函数

lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。

def get_y(a,b):
return lambda x:ax+b
y1 = get_y(1,1) >>>y1(1)
...2
  • 获取对象属性并执行

getattr() 是 python 的内建函数,getattr(object,name) 就相当于object.name但是这里 name 可以为变量

def test(a,b):
'''
dsadad
'''
print(a,b)
def get(n):
for i in dir(n):
print(getattr(test,i))
get(test)
  • 函数注解

函数注解在定义函数的时候对参数和返回值添加注解

  • a: int 这种是注解参数
  • c: str = 5 是注解有默认值的参数
  • -> tuple 是注解返回值。
def test(a: int, b: "it's b", c: str = 5) -> tuple:
return a, b, c
print(test.__annotations__) ...{'a': int, 'b': "it's b", 'c': str, 'return': tuple}

python手册学习笔记1的更多相关文章

  1. python手册学习笔记2

    笔记2 > http://www.pythondoc.com/pythontutorial3/datastructures.html 列表操作 list.append(x) 把一个元素添加到列表 ...

  2. python手册学习笔记3

    笔记3 > http://www.pythondoc.com/pythontutorial3/datastructures.html 装饰器 def log(text): def decorat ...

  3. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

  4. Python Click 学习笔记(转)

    原文链接:Python Click 学习笔记 Click 是 Flask 的团队 pallets 开发的优秀开源项目,它为命令行工具的开发封装了大量方法,使开发者只需要专注于功能实现.恰好我最近在开发 ...

  5. 0003.5-20180422-自动化第四章-python基础学习笔记--脚本

    0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...

  6. Python Flask学习笔记之模板

    Python Flask学习笔记之模板 Jinja2模板引擎 默认情况下,Flask在程序文件夹中的templates子文件夹中寻找模板.Flask提供的render_template函数把Jinja ...

  7. Python Flask学习笔记之Hello World

    Python Flask学习笔记之Hello World 安装virtualenv,配置Flask开发环境 virtualenv 虚拟环境是Python解释器的一个私有副本,在这个环境中可以安装私有包 ...

  8. 获取字段唯一值工具- -ArcPy和Python案例学习笔记

    获取字段唯一值工具- -ArcPy和Python案例学习笔记   目的:获取某一字段的唯一值,可以作为工具使用,也可以作为函数调用 联系方式:谢老师,135-4855-4328,xiexiaokui# ...

  9. Python高级学习笔记

    Python高级学习笔记,此笔记中包含Linux操作系统.Html+CSS+JS.网络协议等. 所有思维导图为本人亲手所画,请勿用于商用. 大哥们,求点赞哦. 第一天笔记:链接 第二天笔记:链接 第三 ...

随机推荐

  1. git分支的创建、删除、切换、合并

    需求背景 开发新功能和修改bug一般放在新建分支,如果觉得可行,可以合并到master分支上. 方式 1.查看分支 git branch (查看本地分支及当前所属分支) git branch -a ( ...

  2. 秘制CSP模板

    不定期更细中...... 声明1:由于js的问题导致VIEW CODE按钮只能点"I"附近才能展开代码 声明2:为了排版的美观,所有的解释以及需要留意的地方我都放在代码中了 声明3 ...

  3. idea 添加 注释 配置

    为类添加自动注释模版 File-->Settings-->Editor-->File and Code Templates 启用该模板才有效一定要勾上 /** * @author : ...

  4. drf框架中所有视图及用法

    0909自我总结 drf框架中所有视图及用法 一.drf框架中的所有视图类 from django.views import View from rest_framework import views ...

  5. Win10安装虚拟机 + Ubuntu

    近期需要利用虚拟机,同时在虚拟机中安装Ubuntu系统.整理安装过程,供今后学习参考. 虚拟机安装包:VMware-workstation-full-12.1.0 链接:https://pan.bai ...

  6. 单调队列与DP

    算是一个总结吧! 先来一个模板: TYVJ 1305 最大子序和 题目描述 输入一个长度为n的整数序列,从中找出一段不超过M的连续子序列,使得整个序列的和最大. 例如 1,-3,5,1,-2,3 当m ...

  7. vue——父子组件间传值

    (1)父组件给子组件传值(商品详情页): 根据订单类型,判断显示立即购买/立即拼单: 通过props来传递参数 父组件(商品详情页) 父组件调用子组件,在子组件的标签中,通过:数据名称=”数据”的形式 ...

  8. python编程系列---Pycharm快捷键(更新中....)

    以下是我常用到的Pycharm快捷键(还有很多,只是我暂时用的最多的就这些): 在开发过程中,经常使用一些快捷键会大大提高开发效率,不要因为看这多而不用,常用的就那些,用得多就都记住了,脱离鼠标,逼格 ...

  9. 面试官:"准备用HashMap存1w条数据,构造时传10000还会触发扩容吗?"

    // 预计存入 1w 条数据,初始化赋值 10000,避免 resize. HashMap<String,String> map = new HashMap<>(10000) ...

  10. Mysql数据库(四)表记录的更新操作

    一.插入表记录 1.使用INSERT...VALUES语句插入新纪录 (1)插入完整数据 mysql> desc tb_manager; +-------+------------------+ ...