程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysqldump備份復原和mysqldump導入導出語句年夜全詳解

mysqldump備份復原和mysqldump導入導出語句年夜全詳解

編輯:MySQL綜合教程

mysqldump備份復原和mysqldump導入導出語句年夜全詳解。本站提示廣大學習愛好者:(mysqldump備份復原和mysqldump導入導出語句年夜全詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是mysqldump備份復原和mysqldump導入導出語句年夜全詳解正文


import datetime as dt
 
def log_time(message, time=None):
  if time is None:
    time=dt.datetime.now()
  print("{0}: {1}".format(time.isoformat(), message))

比來我在一段Python代碼中發明了一個由於毛病的應用默許參數而發生的異常惡心的bug。假如您曾經曉得關於默許參數的全體內容了,只是想譏笑一下我這好笑的毛病,請直接跳到本文末尾。哎,這段代碼是我寫的,然則我異常肯定那天我被惡魔附體了。你懂的,有時刻就是如許。

本文僅僅是總結一下關於Python函數的尺度參數和默許參數的一些根本內容。提示你留意你的代碼中能夠存在的圈套。假如你剛開端接觸Python,開端寫一些函數,我真心推舉你看一下Python官方手冊中關於函數的內容,鏈接以下:Defining Functions 和 More on Defining Functions。
簡略溫習一下函數

Python是一個壯大的面向對象說話,它把這類編程范式推向了巅峰。然則,面向對象編程依然須要依附函數這一概念,你可以用它來處置數據。Python關於可挪用對象有一個更廣泛的概念,即任何對象都可以被挪用,挪用的意思是對其運用數據。

函數在Python中是可挪用對象,而且乍一看,它和其他說話中的函數有著相似的行動。它們獲得一些數據,這些數據被稱為參數,然後處置它們,接著前往成果(假如沒有return語句則是None)

參數被聲明為占位符(在界說函數的時刻),用以代表那些當函數挪用時被現實傳入的對象。在Python中你不須要聲明參數的類型(例如,像你在C或Java中做的那樣)由於Python哲學依附於多態。

記住,Python的變量是援用,即現實變量的內存地址。這意味著Python的函數永久以“傳址”的方法任務(這裡應用了一個C/C++術語),當你挪用一個函數的時刻,其實不是復制了一份參數的值來調換占位符,而是把占位符指向了變量自己。這招致了一個異常主要的成果:你可以在函數外部轉變這個變量的值。這裡有一個很好可視化講授,關於援用機制。

援用在Python飾演著異常主要的腳色,它是Python完整多態方法的主干。關於這個異常主要的主題,請點擊這個鏈接 檢查更好的說明。

為了檢討你能否懂得了這門說話的這一根本特征,請追隨這段簡略的代碼(變量ph代表的是“占位符(placeholder)”)
 

>>> def print_id(ph):
... print(hex(id(ph)))
...
>>> a = 5
>>> print(hex(id(a)))
0x84ab460
>>> print_id(a)
0x84ab460
>>>
>>> def alter_value(ph):
... ph = ph + 1
... return ph
...
>>> b = alter_value(a)
>>> b
6
>>> a
5
>>> hex(id(a))
'0x84ab460'
>>> hex(id(b))
'0x84ab470'
>>>
>>> def alter_value(ph):
... ph.append(1)
... return ph
...
>>> a = [1,2,3]
>>> b = alter_value(a)
>>> a
[1, 2, 3, 1]
>>> b
[1, 2, 3, 1]
>>> hex(id(a))
'0xb701f72c'
>>> hex(id(b))
'0xb701f72c'
>>>

假如你對這裡產生的工作其實不覺得受驚,那解釋你曾經控制了Python中最為主要的部門之一,你可以寧神的跳過上面的說明了。

print_id()函數顯示,函數外部的占位符同運轉時傳入的變量完整一樣(它們的內存地址分歧)。

兩個版本的alter_value()意在轉變傳入參數的值。正如你所看到的,第一個alter_value() 並沒有像第二個alter_value()一樣勝利的轉變變量a的值。這是為何呢?現實上二者的行動是一樣的,都是測驗考試修正傳入的原始變量的值,然則在Python中,有些變量是弗成變的(immutable),整數就在此列。另外一方面,列表其實不是弗成變的,所以函數得以完成它的名字所包管的任務。 在這裡,你可以找到關於弗成變類型的加倍具體的引見 。

關於Python中的函數,還有一些要說的,然則這些是關於尺度的參數的根本常識。
默許參數值

有時刻你須要界說一個函數,讓它接收一個參數,並且在這個參數湧現或不湧現時,函數有分歧的行動。假如一門說話不支撐這類情形,你就只要兩個選擇:第一種是界說兩個分歧的函數,決議每次挪用應當選擇挪用哪一個,第二種是 兩種辦法都是可行的,然則都不是最好的。

Python和其他說話一樣,支撐默許參數值,即函數參數可所以挪用時指定的,也能夠留空,主動接收一個預界說的值。

一個關於默許值的異常簡略(也很沒用)的例子以下:
 

def log(message=None):
  if message:
    print("LOG: {0}".format(message))

這個函數可以帶一個參數運轉(可所以None)

 
>>> log("File closed")
LOG: File closed
>>> log(None)
>>>

然則異樣也能夠不帶參數運轉,這類情形下它會接收一個函數原型中設置的默許值(本例中是None)
 

>>> log()
>>>

你可以在尺度庫中找到更多風趣的例子,好比在open()函數中(請檢查官方文檔)
 

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

函數原型可以證實,例如 f = open('/etc/hosts')如許的挪用,經由過程傳入默許值隱蔽了許多參數 (mode, buffering, encoding, 等),而且使這個函數的典范運用案例變得異常簡略易用。

正如你在內建的open()函數中看到的那樣,我們可以在函數中應用尺度或許默許參數,然則二者在函數中湧現的順序是固定的:起首挪用尺度參數,然後挪用默許參數。
 

def a_rich_function(a, b, c, d=None, e=0):
  pass

緣由是不言而喻的:假如我們可以在尺度參數後面放置一個默許參數,說話就沒法懂得,默許參數能否曾經被初始化。例如,斟酌上面這個函數界說
 

def a_rich_function(a, b, d=None, c, e=0):
  pass

當挪用函數a_rich_function(1, 2, 4, 5)時,我們傳入了甚麼參數? 是d=4, c=5 照樣c=4, e=5?由於d有一個默許的值。是以這類次序的界說是被制止的,假如你如許做,Python會拋出一個SyntaxError
 

>>> def a_rich_function(a, b, d=None, c, e=0):
... pass
...
 File "<stdin>", line 1
SyntaxError: non-default argument follows default argument
>>>

默許參數求值

默許參數可以經由過程通俗值或是函數挪用成果來進步,然則後者這類技巧須要一個特殊的警示

一個通俗的值是硬編碼的,是以除編譯時,其他時刻是不須要求值的,然則函數挪用希冀在運轉時履行求值。所以我們可以如許寫
 

import datetime as dt
 
def log_time(message, time=dt.datetime.now()):
  print("{0}: {1}".format(time.isoformat(), message))

每次我們挪用log_time()時都希冀它可以或許准確供給以後時光。喜劇的是並沒有勝利:默許參數在界說時求值(好比說當你初次導入模塊時),挪用的成果以下
 

>>> log_time("message 1")
2015-02-10T21:20:32.998647: message 1
>>> log_time("message 2")
2015-02-10T21:20:32.998647: message 2
>>> log_time("message 3")
2015-02-10T21:20:32.998647: message 3

假如把默許值賦給一個類的實例,成果會加倍奇異,你可以在Hitchhiker's Guide to Python!中讀到相干內容。依據。。平日的處理辦法是把默許參數調換為None,而且在函數外部檢討參數值。
 
結論

默許參數可以或許極年夜的簡化API,你須要存眷它獨一的“掉敗點”,即求值的機會。使人驚異的是,Python最根本的內容之一,函數的參數和援用,是最年夜的毛病源之一,有時刻關於有經歷的法式員也一樣。我建議抽時光進修一下援用和多態。
相干浏覽:

  •     OOP concepts in Python 2.x – Part 2
  •     Python 3 OOP Part 1 – Objects and types
  •     Digging up Django class-based views – 2
  •     Python Generators – From Iterators to Cooperative Multitasking – 2
  •     OOP concepts in Python 2.x – Part 1

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved