python 在调用函数的时候,

如果传入的参数数量不对,

如果传入的参数类型不对

会报TypeError的错误,并且Python会明确提示参数错误原因。

hex()内置函数会把一个整数转换成十六进制表示的字符串。

’定义一个函数要使用def语句。依次写出函数名,括号,括号中的参数和冒号:”

调用函数时,参数不对,会自检。抛出TypeError,参数类型不对,无法检查,修改my_abs,对类型做检查。只允许整数和浮点类型。

def my_abs():

  if not isinstance(x,(int,float)):

    raise TypeError('bad operand type')

  if x>=0:

    return x

  else:

    return -x

import math

def move(x,y,step,angle=0):

  nx=x+step*math.cos(angle)

  ny=y-step*math.sin(angle)

  return nx,ny

>>x,y=move(100,100,60,math.pi / 6)

>>print(x,y)

同时获得返回值。但是这只是一个假象,Python函数返回的任然是单一值:

r=move(100,100,60,math.pi /6 )

print(r)

返回的值是一个tuple ,在语法上tuple可以省略括号,多个变量可以同时接受tuple.

type("asdhu") 返回str.测试类型。

Class myClass():

  pass

test = myClass()

isinstance(test,myClass) 返回true  isinstance的测试范围更广 。

对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数,至于到底传入了哪些,需要kw检查。

def person(name,age,**kw):

  if 'city' in kw:

    pass

  if 'job' in kw:

    pass

  print('name',name,'age',age','other',kw)

不可变参数

def add_end(L=None):

  if L=None: 

    L=[]

  L.append('END')

  return L

把函数的参数该为可变参数

def calc(*numbers):

  sum=0

  for i in numbers:

     sum=sum+i**2

  return sum

nums=[1,2,3]

calc=(*nums)

如果要限制关键字的名字,

def person(name,age,*,city,job):

  print(name,age,city,job)

与**kw不同。命名关键字参数需要一个特殊分隔符* ,  *后面的参数呗视为命名关键字参数。

调用方式:

>>>person(‘JACK’,24,city='beijing',job='engineer')

如果函数定义中已经有了一个课表参数,后面跟着的命名关键字参数就不在需要一个特殊分隔符*、

def person(name,age,*args,city,job):

  print(name,age,args,city,job)

def fii(name,age,city='shanghai',*args,*,d,**kw) 正确的定义函数的参数的顺序,必选的位置参数,默认,可变参数,命名关键字参数,关键字参数。

对于任意函数,都可以通过类似function(*args, **kw)的形式调用它,无论它的参数是如何定义的。

def fact(n):

  if n==1:

    return 1

  return n*fact(n-1)

以上递归函数的作用是返回1到n的阶层, 但是存在一个严重的问题 ,传入较大的数时,栈溢出,调用一个函数,栈就增加一层,函数返回,栈就减少一层。

解决递归栈溢出 : 尾递归优化。(无论递归本身调用多少次,都不会出现栈溢出)

def fact(n):

  return fact_iter(n,1)

def fact_iter(num,product):

  if num==1:

    return  product

  return  fact_iter(num-1,num*product)

练习:

汉诺塔的移动。

请编写move(n,a,b,c)的函数,它接受参数n,表示3个柱子 A,,B,C中第一个柱子A的盘子数量,然后打印出把所有盘子从A借助B移动到C的方法。

  def move(n,a,b,c):

if n==1:

      return (a," ->",c)

   else:

      move(n-1,a,c,b)

      move(1,a,b,c)

      move(n-1,b,a,c)

利用切片操作,实现一个trim()函数,去掉字符串首尾空格。注意不要用strip()方法

#_*_ coding:utf-8 _*_

def trim(s):

  if s[:1] !=' ' and s[:-1] !=' ':

    return s

  elif s[:1]==' ':

    return trim(s[1:])

  else:

    return trim(s[:-1])

请用迭代查找一个list中最小和最大值。并返回一个tuple:

# -*- coding:utf-8 -*-

def findMinAndMax(L):

  if L!=[]:

    min=l[0]

    max=l[0]

    for i in L:

      if max<i:

        max=i

      if min>i:

        min=i

    return (min,max)

  else:

    return(None,None)

列表生成式:

 >>>[x*x  for x in range(1,11)]

[1.4.9.16.25.36.49.64.81.100]

>>>[x*x for x in range(1,11)  if  x%2 == 0 ]

[4,16,36,64,100] 偶数的平方。

写一个功能、。 列出当前目录下的所有文件和目录名,可以通过一行代码实现、

>>>import os

>>>[d for d in os.listdir('.')]

把一个list的所有的字符串变成小写:

>>> L=['Hello','World','IBM','Apple']

>>>[s.lower() for s in L]

测试可迭代对象:>>>isinstance([],Iterable)

        >>>isinstance('2124',Iterable)

高级特性之生成器:

  创建生成器的方法 :

    ①  把列表生成式的[ ]改成()即可。、

      g=(x*x for x in range(10)),通过next(g)返回generator的下一个返回值。一般都用for循环来迭代

      generator保存的是算法。计算到最后一个元素抛出stopIteration错误。

    ②  def fib(max):

        n,a,b=0,0,1

        while n<max:

          yield b

          a,b=b,a+b

        return 'done'              ####斐波那契数列 后一个数是前两个数的和

    

    

    

python笔记01(详情请看廖雪峰的官方网站)的更多相关文章

  1. python 廖雪峰的官方网站

    https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014316119884678 ...

  2. 使用@property - 廖雪峰的官方网站

    使用@property 阅读: 20616 在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9 ...

  3. github教程--廖雪峰的官方网站

    http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

  4. Python自学笔记-字符串编码(来自廖雪峰的官网Python3)

    感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下. 以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看.   1.理解变 ...

  5. Python自学笔记-sorted()函数(来自廖雪峰的官网Python3)

    感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下. 以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看. 排序算法 排序 ...

  6. Python自学笔记-lambda函数(来自廖雪峰的官网Python3)

    感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下. 以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看. 匿名函数 通过 ...

  7. Python自学笔记-filter()函数(来自廖雪峰的官网Python3)

    感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下. 以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看. Python内 ...

  8. Python自学笔记-列表生成式(来自廖雪峰的官网Python3)

    感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下. 以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看. 列表生成式 列 ...

  9. Python自学笔记-关于切片(来自廖雪峰的官网Python3)

    感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下. 以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看. 切片 L[0: ...

随机推荐

  1. Python 实现类似sed命令的字符串替换小程序

    环境 PyCharm, Windows 背景 sed命令 sed 's/原字符串/新字符串' 单引号中间是s表示替换,原字符串就是要被替换掉的字符串,新字符串就是想要的字符串. 效果 在命令行输入py ...

  2. Cookie、Session和Django分页

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

  3. MongoDB入门_MongoDB安装与配置

    MongoDB运行环境 MongoDB环境:CentOS-6.7-i386 MongoDB版本:MongoDB 2.6.5 ssh工具:xshell 文本编辑工具:vim与editplus++ 编译M ...

  4. CentOS 7 环境下部署 SVN 并实现自动更新(版本库放在Tomcat下)

    1.安装 SVN 1.1先检查是否有安装 svn rpm -qa subversion #没有什么显示就说明没有安装过yum remove subversion #如果有安装就运行删除老版本yum i ...

  5. 2019 蓝桥杯国赛 B 组模拟赛 E 蒜头图 (并查集判环)

    思路: 我们看条件,发现满足条件的子图无非就是一些环构成的图, 因为只有形成环,才满足边的两个点都在子图中,并且子图中节点的度是大于0的偶数. 那么如果当前有k个环,我们可以选2^k-1个子图,为什么 ...

  6. BSOJ5467 [CSPX2017#3]整数 莫比乌斯反演+杜教筛

    题意简述 给你两个整数\(n\),\(k\),让你求出这个式子 \[ \sum_{a_1=1}^n \sum_{a_2=a_1}^n \sum_{a_3=a_2}^n \cdots \sum_{a_k ...

  7. js基础复习~Array对象

    Array对象 lenght 获取到数组的长度 concat() 方法用于合并两个或多个数组.此方法不会更改两大有数组,而是返回一个新的数组 let arr1 = ["a",&qu ...

  8. rocketmq特性(features)

    # 特性(features) 1 订阅与发布 消息的发布是指某个生产者向某个topic发送消息:消息的订阅是指某个消费者关注了某个topic中带有某些tag的消息,进而从该topic消费数据. 2 消 ...

  9. Day_02-Python的分支结构和循环结构

    分支结构 应用场景 迄今为止,我们写的Python代码都是一条一条语句顺序执行,这种结构的代码我们称之为顺序结构.然而仅有顺序结构并不能解决所有的问题,比如我们设计一个游戏,游戏第一关的通关条件是玩家 ...

  10. CopyOnWrite 个人理解以及应用

    缘由 最近在看<Redis 设计与实现>,看到Redis的执行bgsave生成dump.rdb是根据CopyOnWrite的 之前也不是很懂为啥要有CopyOnWrite这个东西 翻看文章 ...