ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python初学者进阶必备知识点

2020-03-14 17:46:01  阅读:247  来源: 互联网

标签:知识点 进阶 python 函数 args fib kwargs print name


文章目录

1,缺省函数参数

1,调用函数时,缺省参数的值如果没有传入,则被认为是默认值
2,具有默认值的参数必须在结尾

def  default ( name,age = 35 ):

   print ("Name: ", name)

   print ("Age: ", age)

#调用 default 函数

default (name="name")
default (age=10,name="name" )

下面看一下操作结果:

Name:  name
Age:  35
Name:  name
Age:  10

在程序设计中,一个函数的缺省参数是指不必须指定值的参数。在大多数程序设计语言中,函数可以接受一个或多个参数。通常对于每个参数都需要指定它们的值。一些较新的程序设计语言允许程序员设定缺省参数并指定默认值,当调用该函数并未指定值时,该缺省参数将为缺省值。—维基百科

2,*args和**kwargs的用法

*args和**kwargs主要用于函数定义,你可以将不定数量的参数传递给一个函数
*args主要是用来发送一个非键对值的可变数量的参数列表

def text_args(a_arg,*args):
    print('first normal a_arg:',a_arg)
    for arg in args:
      print('another arg through *args:',arg)

text_args('name','pthon','java','c')

结果如下

first normal arg: name
another arg through *args: pthon
another arg through *args: java
another arg through *args: c

接下来看看kwargs
kwargs 允许你将不定长度的键值对, 作为参数传递给一个函数。适用在有键对值参数函数的时候

def kwargs(**kwargs):
    for key, value in kwargs.itmes():
        print('{}--{}'.format(key,value))
kwargs(name = 'xiaobai',age = 18)

结果:

name--xiaobai
age--18

接下来看看位置参数混入kwargs的时候

def get_kwargs(kw,**kwargs):
    print('first normal kwarg',kw)
    for key, value in kwargs.itmes():
        print('{}-{}'.format(key,value))
get_kwargs('name',name = 'xiaobai')

结果如下

AttributeError: 'dict' object has no attribute 'itmes'

出现了一个属性错误

如果你想在函数中使用者三种参数,顺序是这样的:

def func (fargs,*args,**kwargs):
    print('first normal fargs:',fargs)
    print('first normal args:',agrs)
    print('first normal kwargs:',kwargs)
func('fargs','args','kwargs','python',name = '小白')

结果

first normal fargs: fargs
first normal args: ('args', 'kwargs', 'python')
first normal kwargs: {'name': '小白'}

3,引用

先谈引用前,先了解一下变量,赋值

a = 1
print(a)
#1

在看一段代码

def number(a):
    a[1] = a 
    print(a)
numbers([1,2,3])

我预想应当是

[1,[1,2,3],3]

实际上是

[1, [...], 3]

结果却为何要赋值无限次?

numbers[1] = numbers
#这样相当于创建了一个引用自身的结构,所以导致了无限循环,学过递归的看官,也应该了解过一些。

当初我也懵了好久,这样可以说 Python 没有赋值,只有引用。也可以说是用赋值这词不是很合适,换成引用比较合适一点,

总结:Python 中没有「变量」,我们平时所说的变量其实只是「标签」,是引用而已。

4, 递归

什么是递归? 递归见递归
递归在程序语言中简单的理解是:方法自己调用自己,初学者可能不太理解(也包括我自己吧()),还是上代码吧
最经典的递归例子之一是斐波那契数列

def fib(n):
    """
    This is Fibonacci by Recursion.
    """
    if n==0:
        return 0
    elif n==1:
        return 1
    else:
        return fib(n-1) + fib(n-2)
f = fib(10)
print(f)
#输出 55

换成 **f = fib(5)**在看看

f = fib(5)
#输出5

fib(n-1) + fib(n-2)就是调用了自己他本身,实现递归,下面走一个过程,方便理解一下。
1,一开始n = 5,走else分支,return fib(5-1)+(510-2)。
2,在看return fib(5-1)+(5-2)中的fib(5-1),也就是4,也要走else分支,在计算return fib(4-1)+(4-2),重复复循环。
3,当循环到**fib(2-1)+fib(2-2)**的时候,fib(2-1)返回,开始走elif分支,及返回1,同理fib(2-2),返回0,讲这两个的值返回到最开的那一步fib(5-1),fib(4-1)+fib(4-2)= 1+0+1+1+0=3,同理 fib(5-2),得2
4,结果就是fib(5-1)+fib(5-2)=3+2=5。
需要注意的是:
1,递归就是在过程或函数里调用自身。
2,必须有一个明确的递归结束条件,称为递归出口。
参考:斐波那契数列。

5,lambda函数

lambda函数也称为匿名函数,是几个比较突出的函数之一,关于剩下几个特殊函数还是以后再说了,其突出特点为能进行函数式编程
函数式编程(英语:functional programming)或称函数程序设计、泛函编程,是一种编程范式,它将电脑运算视为函数运算,并且避免使用程序状态以及易变对象。其中,λ演算(lambda calculus)为该语言最重要的基础。而且,λ演算的函数可以接受函数当作输入(引数)和输出(传出值)。
-------------维基百科
lambda准确的是应该是一个表达式,而不是函数
直接上代码:

lam = lambda x:x+3
list = []
for i in range(0,10):
    list.append(lam(i))
print(list)

结果如下:

[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

没让你们失望吧
上更复杂一点的吧

lam = lambda x, y, z : (x + y) ** z
lam(8,9,2)

输出为

289

是不是好理解多了

总结:
1,’:'前面是变量,后面是表达式,
2,lambda表达式只是让代码更加简洁,不会造成性能的提升
3,lambda函数不能包含命令,包含的表达式不能多于1个
4,不要太过于依赖lambda函数

总结

文章中出现错误或者需要补充的内容欢迎在下方留言,后续还会有更多知识送给大家的

标签:知识点,进阶,python,函数,args,fib,kwargs,print,name
来源: https://blog.csdn.net/weixin_45904404/article/details/104857797

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有